• Spring事务


    1、什么是事务

      事务必须服从ACID原则。ACID指的是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

    通俗理解,事务其实就是一系列指令的集合。

    2、事务的四大特性

    • 原子性:操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
    • 一致性:事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
    • 隔离性:在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在任何影响。只有在事务确定正确提交之后,才会显示该事务对数据的改变。其他事务才能获取到这些改变后的数据。
    • 持久性:当事务正确完成后,它对于数据的改变是永久性的。

    3、事务的实现方式

      4种实现方式:

        a、编程式事务管理

    <!-- 配置事务管理的模板:Spring为了简化事务管理的代码而提供的类 -->

    <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager"/>
    </bean> 

        b、声明式事务管理

          --基于TransactionProxyFactoryBean的方式   
          
    <!-- ==================================2.使用XML配置声明式的事务管理(原始方式)=============================================== -->

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 配置业务层的代理 -->
    <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <!-- 配置目标对象 -->
    <property name="target" ref="accountService"/>
    <!-- 注入事务管理器 -->
    <property name="transactionManager" ref="transactionManager"></property>
    <!-- 注入事务的属性 -->
    <property name="transactionAttributes">
    <props>
    <!--
    prop的格式:
    * PROPAGATION :事务的传播行为
    * ISOTATION :事务的隔离级别
    * readOnly :只读
    * -EXCEPTION :发生哪些异常回滚事务
    * +EXCEPTION :发生哪些异常不回滚事务
    -->
    <prop key="transfer">PROPAGATION_REQUIRED</prop>
    <!-- <prop key="transfer">PROPAGATION_REQUIRED,readOnly</prop> -->
    <!-- <prop key="transfer">PROPAGATION_REQUIRED,+java.lang.ArithmeticException</prop> -->
    </props>
    </property>   
    c、声明式事务管理
          --基于XML配置声明的方式(基于tx/aop)
      
    <!-- ==================================3.使用XML配置声明式的事务管理,基于tx/aop=============================================== -->

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 配置事务的通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!--
    propagation :事务传播行为
    isolation :事务的隔离级别
    read-only :只读
    rollback-for:发生哪些异常回滚
    no-rollback-for :发生哪些异常不回滚
    timeout :过期信息
    -->
    <tx:method name="transfer" propagation="REQUIRED"/>
    </tx:attributes>
    </tx:advice>

    <!-- 配置切面 -->
    <aop:config>
    <!-- 配置切入点 -->
    <aop:pointcut expression="execution(* com.testfan.spring.demo3.AccountService+.*(..))" id="pointcut1"/>
    <!-- 配置切面 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
    </aop:config>


      d、
    声明式事务管理
          --基于XML配置声明的方式(基于注解)
          
    <!-- ==================================4.使用注解配置声明式事务============================================ -->

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 开启注解事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    3、什么是事务传播 
      
    “事务是会传播的”在Spring中有针对传播特性的多种配置我们大多数情况下只用其中的一
    种:PROPGATION_REQUIRED:这个配置项的意思是说当我调用service层的方法的时候开启一个事务(具体调用那一层的方法开始创建事
    务,要看你的aop的配置),那么在调用这个service层里面的其他的方法的时候,如果当前方法产生了事务就用当前方法产生的事务,否则就创建一个新
    的事务。这个工作使由Spring来帮助我们完成的。

    4、什么是事务隔离
    是为了保证数据的一致性
      
     
  • 相关阅读:
    总结PHP缓存技术的多种方法
    超赞的Linux软件分享(持续更新)
    Android与IOS的优缺点比较 对 Android 与 IOS 比较是个个人的问题。 就好比我来说,我两个都用。我深知这两个平台的优缺点。所以,我决定分享我关于这两个移动平台的观点。另外,然后谈谈我对新的 Ubuntu 移动平台的印象和它的优势。 IOS 的优点 虽然这些天我是个十足的 Android 用户,但我必须承认 IOS 在某些方面做的是不错。首先,苹果公司在他们的设备更新方面有更
    简单说说JavaBean的使用
    mysql 压缩版安装
    分布式网站部署
    shiro启用注解方式
    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
    windows 下设置nginx负载均衡
    windows mysql 主从热备
  • 原文地址:https://www.cnblogs.com/cristin/p/7749451.html
Copyright © 2020-2023  润新知