事务传播行为

事务传播行为:如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为


 
  1. 1. TransactionDefinition.PROPAGATION_REQUIRED:

  2. 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。

  3.  
  4. 2. TransactionDefinition.PROPAGATION_REQUIRES_NEW:

  5. 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

  6.  
  7. 3. TransactionDefinition.PROPAGATION_SUPPORTS:

  8. 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

  9.  
  10. 4. TransactionDefinition.PROPAGATION_NOT_SUPPORTED:

  11. 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

  12.  
  13. 5. TransactionDefinition.PROPAGATION_NEVER:

  14. 以非事务方式运行,如果当前存在事务,则抛出异常。

  15.  
  16. 6. TransactionDefinition.PROPAGATION_MANDATORY:

  17. 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

  18.  
  19. 7. TransactionDefinition.PROPAGATION_NESTED:

  20. 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;

  21. 如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

上表字段说明:


 
  1. 1. value :主要用来指定不同的事务管理器;

  2. 主要用来满足在同一个系统中,存在不同的事务管理器。

  3. 比如在Spring中,声明了两种事务管理器txManager1, txManager2.然后,

  4. 用户可以根据这个参数来根据需要指定特定的txManager.

  5.  
  6. 2. value 适用场景:在一个系统中,需要访问多个数据源或者多个数据库,

  7. 则必然会配置多个事务管理器的

  8.  
  9. 3. REQUIRED_NEW:内部的事务独立运行,在各自的作用域中,可以独立的回滚或者提交;

  10. 而外部的事务将不受内部事务的回滚状态影响。

  11.  
  12. 4. ESTED 的事务,基于单一的事务来管理,提供了多个保存点。

  13. 这种多个保存点的机制允许内部事务的变更触发外部事务的回滚。

  14. 而外部事务在混滚之后,仍能继续进行事务处理,即使部分操作已经被混滚。

  15. 由于这个设置基于 JDBC 的保存点,所以只能工作在 JDB C的机制。

  16.  
  17. 5. rollbackFor:让受检查异常回滚;即让本来不应该回滚的进行回滚操作。

  18.  
  19. 6. noRollbackFor:忽略非检查异常;即让本来应该回滚的不进行回滚操作。

  1. 1. 事务方法的嵌套调用会产生事务传播。

  2. 2. spring 的事务管理是线程安全的

  3. 3. 父类的声明的 @Transactional 会对子类的所有方法进行事务增强;

  4. 子类覆盖重写父类方式可覆盖其 @Transactional 中的声明配置。

  5.  
  6. 4. 类名上方使用 @Transactional,类中方法可通过属性配置来覆盖类上的 @Transactional 配置;

  7. 比如:类上配置全局是可读写,可在某个方法上改为只读。

  8.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值