Spring事务传播行为
小明 Lv6

Spring事务的传播(Transaction Propagation)是指在多个事务边界嵌套执行时,如何管理这些事务的行为和隔离性。Spring框架提供了多种事务传播行为供开发者选择,以适应不同的业务需求。下面是几种常见的事务传播行为:

  1. REQUIRED(默认):如果当前存在事务,则加入该事务中执行;如果当前没有事务,则启动一个新事务。这是最常用的传播行为,所有方法都在同一个事务中执行。

  2. REQUIRES_NEW:无论当前是否存在事务,都会暂停当前事务,并启动一个新的事务来执行。即使外部事务失败回滚,新的事务也会继续执行。

  3. NESTED:如果当前存在事务,则在当前事务的嵌套事务中执行;如果当前没有事务,则启动一个新事务。嵌套事务相对于独立的事务有更高的隔离性,且可以独立地进行提交或回滚。

  4. SUPPORTS:如果当前存在事务,则加入该事务中执行;如果当前没有事务,则以非事务方式执行。支持当前事务,但不强制要求存在事务。

  5. NOT_SUPPORTED:暂停当前事务(如果存在),以非事务方式执行。即使外部事务存在,该方法也不会参与到任何事务中。

  6. NEVER:如果当前存在事务,则抛出异常;否则以非事务方式执行。不允许在事务中执行,如果当前存在事务,则会抛出异常。

  7. MANDATORY:要求当前必须存在事务,否则抛出异常。必须在事务中执行,如果没有事务则会抛出异常。

通过使用Spring的事务传播行为,我们可以灵活地控制事务的行为和隔离级别,以满足不同场景下的需求。在配置Spring事务管理时,可以通过在@Transactional注解中指定propagation属性,或者在XML文件中配置tx:advice元素的propagation属性来设置事务的传播行为。

需要注意的是,事务传播行为只对于被代理的方法有效,非public方法默认不会被Spring的事务代理拦截。

关注获取更多资源

image
 评论