Spring:(九)声明式事物

一、事物

事物:保证数据的一致性和完整性

事物就是把一系列的动作当做一个独立的工作单元,这些动作要么全部完成,要么都不起作用

  • 特性

    原子性,一致性,隔离性,持久性


二、事物管理

Spring在不同的事务管理API之上定义了一个抽象层,使得开发人员不必了解底层的事务管理API就可以使用Spring的事务管理机制,Spring支持编程式事务管理和声明式的事务管理

  • 编程式事务管理

    • 将事务管理代码嵌到业务方法中来控制事务的提交和回滚
    • 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码
  • 声明式事务管理

    • 一般情况下比编程式事务好用。
    • 将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。
    • 将事务管理作为横切关注点,通过aop方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。

  1. -事物管理接口
  • PlatformTransactionManager: (平台)事务管理器
  • TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
  • TransactionStatus: 事务运行状态
    • 脏读:一个事物正在修改数据,还没有提交至数据库,另外一个事物访问此数据,进行操作,另外一个事物读到的就是“脏数据”
    • 丢失修改:一个事物修改数据,另外一个事物也修改数据,那么第一个事物的操作将丢失
    • 不可重复读:一个事物多次读取同一个数据,另外一个事物修改数据,这样导致事物一两次读取的数据不一样
    • 幻读:一个事物多次读取数据,另外一个事物添加数据,事物一发现多了原本不存在的元素,仿佛发生了幻觉

三、使用

使用Spring管理事务,注意头文件的约束导入 : tx

xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
  1. 配置事务管理器
    1. 无论使用Spring的哪种事务管理策略(编程式或者声明式)事务管理器都是必须的。
    2. 就是 Spring的核心事务管理抽象,管理封装了一组独立于技术的方法。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
 </bean>
  1. 配置事物通知

    <!--配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--配置哪些方法使用什么样的事务,配置事务的传播特性-->
            <tx:method name="add" propagation="REQUIRED"/>
            <tx:method name="delete" propagation="REQUIRED"/>
            <tx:method name="update" propagation="REQUIRED"/>
            <tx:method name="search*" propagation="REQUIRED"/>
            <tx:method name="get" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    
原文地址:https://www.cnblogs.com/dreamzone/p/12402854.html