Spring Boot 事务@Transactional的实现原理

       @Transactional 涉及到两个方面,一个是数据的持久化,第二个是数据库的事务。关于持久化以及事务不做赘述。

在持久化中涉及到了实体管理器EntityManager类,该类通过@PersistenceContext进行注解,标识只注入一次实体管理器,但是因为EntityManager是一个interface,所以它的注入是通过感知上下文内容进行注入的,因此是存在的问题的,所以需要进行一层代理,这层代理一般是用SharedEntityManagerInvocationHandler。

        @Transactional的具体工作原理可从以下三个方面进行把握,EntityManager的代理,Transactional层面,Transactional管理器层面。

        Transactional层面:它的执行包含执行前的决策,和执行后的处理,其中执行前是通过Transactional管理器决定如何进行的,这一步主要是决定新的事务怎么处理。执行后是看结果是否进行commit或者进行roll back。

        Transactional管理器层面:决定是否创建一个新的事务,是否创建一个新的实力管理器。如果决定要创建一个新的事务,那么需要进行以下操作。创建一个新的事务,并且将这个新事务与当前已有的事务进行绑定,然后从数据库连接池中拿取一个线程,并将该线程与当前事务进行绑定。 

    这里需要注意的是如何决定是否创建一个新的事务,那么就要从事务配置的传播行为Trans

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值