主要内容

  • 概念层面要点
    • 事务控制相关知识
      • 隔离级别等知识
    • 编程式事务控制相关知识(三大对象)
      • PlatformTransactionManager事务平台管理器
        • 获取事务状态信息
        • 提交事务
        • 回滚事务
      • TransactionDefinition事务说明
        • 获得事务隔离级别
          • 相应的设置可以解决脏读、不可重复读、虚读
          • l ISOLATION_DEFAULT
          • l ISOLATION_READ_UNCOMMITTED
          • l ISOLATION_READ_COMMITTED
          • l ISOLATION_REPEATABLE_READ
          • l ISOLATION_SERIALIZABLE
        • 获得事务传播行为
        • 获得超时时间
        • 是否只读
      • TransactionStatus事务状态
  • 基于XML的声明式事务控制
  • 基于注解的声明式事务控制

基于XML的声明式事务控制

  • 切点:执行的业务方法
  • 通知:事务管理器
  • 切面:切点+通知— 配置切面这一过程叫织入(复习)

  • 快速使用

    • ①引入tx命名空间
    • ②配置事务增强
    • ③配置事务 AOP 织入

      • image.png
      • image.png ```java
  1. <!–配置平台事务管理器–>
  2. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  3. <property name="dataSource" ref="dataSource"></property>
  4. </bean>
  5. &lt;!&ndash;事务增强配置&ndash;&gt;
  6. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  7. <tx:attributes>
  8. &lt;!&ndash;默认配置,对切点的所有方法使用,并应用默认配置&ndash;&gt;
  9. <tx:method name="*"/>
  10. &lt;!&ndash;为具体方法配置&ndash;&gt;
  11. <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
  12. <tx:method name="save" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
  13. <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true"/>
  14. </tx:attributes>
  15. </tx:advice>
  16. &lt;!&ndash;配置事务织入&ndash;&gt;
  17. <aop:config>
  18. &lt;!&ndash;抽取切点配置&ndash;&gt;
  19. <aop:pointcut id="txPointcut" expression="execution(* com.jquan.service.impl.*.*(..))"/>
  20. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
  21. </aop:config>

- 使用总结
   - 平台事务管理器配置
   - 事务通知配置
   - 事务aop织入配置

<a name="Eh72J"></a>
## 基于注解的声明式事务控制

- 编写 AccoutDao
- 编写 AccoutService
-  编写 applicationContext.xml 配置文件
- <br />
```java

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <property name="user" value="root"/>
        <property name="password" value="Cjq123456789"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean> 

<!--组件扫描-->
    <context:component-scan base-package="com.jquan"/>
    <!--事务的注解驱动-->
    <tx:annotation-driven/>
    <!--平台事务管理器还是要配置的-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--datasource\jdbcTemplate上面已经配好了-->
  • 要点总结
    • 平台事务管理器配置(xml方式)
    • 事务通知的配置(@Transactional注解配置)
    • 事务注解驱动的配置 <tx:annotation-driven/>

l