springboot的事务传播机制有哪些?
时间: 2023-05-21 10:01:15 浏览: 111
SpringBoot的事务传播机制包括:
1. REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式继续运行。
3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起该事务。
5. NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则挂起该事务。
6. NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
7. NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
相关问题
springboot事务传播机制
Spring Boot事务传播机制是指在一个事务方法调用另一个事务方法时,如何处理这些事务的传播行为。Spring中定义了多种事务传播行为,可供开发者按照实际需要使用,常见事务传播行为如下:
1. REQUIRED:默认的事务传播机制,如果当前没有事务,那么就新建一个事务,如果已经有事务在进行中,那么就加入到这个事务中,不管是抛出异常还是正常结束都会提交事务。
2. SUPPORTS:如果当前有事务在进行中,那么就加入到这个事务中,如果当前没有事务在进行中,那么就不开启事务。
3. MANDATORY:如果当前有事务在进行中,那么就加入到这个事务中,如果当前没有事务,在抛出异常。
4. REQUIRES_NEW:无论当前是否有事务在进行,都会新建一个事务并执行。
5. NOT_SUPPORTED:当前如果有事务在进行,就将事务挂起,执行完后再继续当前事务。
6. NEVER:当前如果有事务在进行,直接抛出异常。
7. NESTED:在当前事务的嵌套事务中执行,并独立于嵌套事务之外的其他所有事务运作,如果抛出异常则只回滚当前事务的嵌套事务,而不包括其他事务。
Springboot的事务传播如何正确使用?
在Springboot中,事务传播机制指定在一个方法调用期间,如果一个事务已经存在,当前方法应该如何处理事务。在正确使用事务传播机制时,我们需要考虑以下几点:
1. 选择正确的事务传播级别。Springboot提供了七种不同的事务传播级别,包括:
- Propagation.REQUIRED(默认值):如果当前存在事务,则加入该事务,否则新创建一个事务;
- Propagation.SUPPORTS:如果当前存在事务,则加入该事务,否则以非事务方式执行;
- Propagation.MANDATORY:当前必须存在事务,否则抛出异常;
- Propagation.REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务;
- Propagation.NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,暂停当前事务;
- Propagation.NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常;
- Propagation.NESTED:创建一个新的嵌套事务,如果当前存在事务,则在当前事务中嵌套执行。
2. 确定事务的边界。通常,我们希望将每个服务方法作为一个独立的事务来处理,因此需要确保每个服务方法都用@Transactional注解进行标记。
3. 处理异常情况。当一个方法抛出异常时,事务有两种可能的行为。一种是回滚整个事务,另一种是回滚当前方法执行的部分数据。在编写代码时需要考虑这两种情况,同时还需要处理异常并避免事务悬挂的问题。
4. 避免过度使用事务。事务管理是一个消耗资源的过程,对于大规模的系统来说,存在过度使用事务的风险,需要在性能和功能之间做出权衡。
总之,在正确使用事务的过程中,需要根据具体的情况选择合适的事务传播级别、确定事务的边界、处理异常情况,避免过度使用事务。只有这样才能有效地管理事务,并保证系统的正确性和性能。
阅读全文