springboot的事务
2019-01-09 本文已影响125人
简书徐小耳
个人公众号(徐小耳博客)对于springboot,spring,tomcat,netty等框架有更深入的理解,请移步关注
image.pngspring事务的原理:
通过给spring设置@Transactional注解
该注解为让spring为当前类生成一个代理对象
spring会给该对象增加一个TransactionInterceptor拦截器
该方法最终会调用TransactionAspectSupport的invokeWithinTransaction方法
方法有三个参数Method method, Class<?> targetClass, final InvocationCallback invocation
method和targetClass都是原始类的,而invocation则是属于ReflectiveMethodInvocation,该类是专门负责处理aop调用链的
该类首先是获取TransactionAttribute,主要是包含事务管理器,传播属性和隔离级别
再然后获取到joinpointIdentification,一般是我们的方法名称
然后根据上述的方式开始创建事务,执行一长串方法 比如有完善事务,finally有清除事务信息,最终有提交事务
同时我们也注意到其在开启事务的时候通过threadlocal存储我们的每个事务线程的ConnectionHolder
这个里面存放connection
所以spring的事务是不好传播到另外一个线程