羽化登峰

导航

 

spring 的事务传播级别就是AOP的体现,创建TransactionInterceptor和TransactionAspectSupport
  

  A. required:支持当前事务,如果当前没有事务,就新建一个事务,这是Spring默认的事务的传播
  B. supports:支持当前事务,如果当前没有事务,就以非事务方式执行;
  C. mandatory:支持当前事务,如果当前没有事务,就抛出异常;
  D. requireds new:新建事务,如果当前存在事务,把当前事务挂起。新建的事务将和被挂起的事务没有任何关系,是两个独立的事务,外层事务失败回滚之后,不能回滚内层事务执行的结果,内层事务失败抛出异常,外层事务捕获,也可以不处理回滚操作;
  E. not supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起;
  F. never:以非事务方式执行,如果当前存在事务,则抛出异常;
  G. nested:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。
  上述的意思是当前线程创建mysql的connect连接,在这个线程中的所有方法是否使用同一个connect连接,还是新建连接。
  1.执行TransactionAspectSupport的invokeWithinTransaction()完成整个事务的流程
  

  2.调用createTransactionIfNecessary()创建事务信息,根据用户配置的7种传播级别
  

  3.getTransaction()获取事务对象的信息,是否新建
  

  4.prepareTransactionInfo(),创建线程并将事务绑定到当前线程
  

  5.retVal = invocation.proceedWithInvocation();执行被代理的方法,如果方法中存在别的事务方法,重新回到第一步

posted on 2022-03-14 10:47  默默攀岩  阅读(45)  评论(0编辑  收藏  举报