zoukankan      html  css  js  c++  java
  • spring事物源码分析篇一

    Spring事物简要介绍:

    1.Spring事物是基于AOP而实现的业务方法增强,在执行业务方法前面新建事物,或者在已有事物上面进行处理,然后当当业务目标方法正常执行的时候,执行事物提交,否则执行事物回滚。注意在默认情况下面,spring事物只是对RuntionExceptionError异常进行回滚,对于常见的Exception默认不进行回滚。

    2.springAop是根据配置的通知获取增强,而在spring事物则是根据@Transactional事物注解(声明式事物)获取对应的增强,spring获取事物增强的逻辑:spring在程序初始化的时候,会先去找匹配的增强,一般先去实现类的方法中寻找,其次是去实现类上面寻找。然后再去接口方法上面寻找,最后如果前面都没有的话,再去接口上面寻找。最后会将生成的增强转换为拦截器和生成代理对象,在程序执行的时候,在调用代理对象invoke方法的时候,会调用拦截器进行事物的实现拦截,并进行事物的回滚和提交操作逻辑。

    3.spring是执行业务方法的时候,分为两种情况,如果当前线程不存在事物,则开起新的事物,赋值数据库连接的基本属性,如果当前线程已经存在事物,则处理的时候根据事物的传播行为,需要主要考虑两种情况:第一:如果当前事物的传播行为是PROPAGATION_REQUIRES_NEW ,则需要开启新的事物,不考虑原有的事物,此时,spring会将原有的事物挂起,待当前事物完成以后则将挂起的事物恢复,如果当前事物失败,不会引起挂起事物的回滚。第二:如果传播行为设置是,PROPAGATION_NESTED,spring允许嵌套事物的存在,此时会设置一个保存点,嵌套事物的回滚会根据保存点进行回滚。但是由于JTA事物不支持保存点设置,如果是JTA事物设置允许嵌套事物,则会按照传播行为为PROPAGATION_REQUIRES_NEW的情况下面进行处理,即开启新的事物。

    4.当事物中含有保存点信息的时候,spring是不会进行事物提交的。因为spring的内嵌事物根据事物流是流到最外层的事物进行提交的,所有如果事物中含有保存点信息,则证明该事物是内嵌事物,不是最外层事物,所以spring不会进行提交。

  • 相关阅读:
    (原)win7 下安装maven3.3
    (原)Linux下安装tomcat
    (原)Linux下 安装jdk8
    gradle 使用eclipse debug
    (原)Win7下Tomcat配置文件基本配置及环境变量配置
    (原)win7下JDK1.7安装
    (原)装饰模式
    (转)MySql与Java的时间类型
    代码重构
    08-17工作总结
  • 原文地址:https://www.cnblogs.com/histlyb/p/9723912.html
Copyright © 2011-2022 走看看