Spring如何实现事务的传播特性

所谓事务传播特性就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7中事务传播行为

1.PROPAGATION_REQUIRED(默认实现):当前没有事务则新建事务,有则加入当前事务

2.PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务则以非事务方式执行

3PROPAGATION_MANDATORY:使用当前事务,如果没有则抛出异常

4PROPAGATION__REQUIRES_NEW:新建事务,如果当前有事务则把当前事务挂起

5PROPAGATION_NOT_SUPPORIED:以非事务的方式执行,如果当前有事务则把当前事务挂起

6PROPAGATION_NEVER:以非事务的方式执行,如果当前有事务则抛出异常

7PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则执行1

为什么Spring可以让事务进行传播呢:看了源码我们就明白了

-----由于Spring的事务管理是通过线程相关的ThreadLocal来保存数据访问基础设施的(Connection对象),再结合IoC和AOP实现高级声明式事务的功能,所以Spring的事务天然的和线程有着千丝万缕的关系。

      Spring通过ThreadLocal可以将大部分Bean无状态化(线程安全的)所以Spring中单实例Bean对线程安全问题拥有一种天然的免疫力。

       所以Spring中DAO和Service都以单实例的方式存在,Spring将有状态的变量(Connection)本地线程化,达到另一个层面上的线程无关,从而实现线程无关。

 

 

       总结:在相同的线程中进行相互嵌套调用的事务方法工作于相同的事务中,不同的线程中,则各自独立工作与独立的事务中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值