2023-01-18
一、Spring声明式事务管理
1、事务四大特征(ACID)
(1)原子性
(2)一致性
(3)隔离性
(4)持久性
2、事务三种行为
(1)开启事务:connection.setAutoCommit(False)
(2)提交事务:connection.commit()
(3)回滚事务:connection.rollback()
二、Spring中支持事务管理
1、编程式事务管理
(1)获取数据库连接Connection对象
(2)取消事务的自动提交(开启事务)
(3)执行操作
(4)正常完成操作时手动提交事务
(5)执行失败时回滚事务
(6)关闭相关资源
2、声明式事务管理(使用AOP管理事务)
先横向提取(事务管理代码),再动态织入
三、使用声明式事务管理
注:如果不使用事务管理代码,会出现以下情况:
同一个业务中,会出现局部成功及局部失败的现象(不正常)。
1、基本使用步骤
(1)添加支持jar包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.10</version> </dependency>
(2)编写配置文件
①配置事务管理器
②开启事务注解支持
<!-- 配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 开启事务注解支持--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
(3)在需要事务管理的业务方法上添加注解@Transational
注:添加声明式事务管理之后,获取是代理对象,代理对象不能转换为目标对象(实现类)
四、Spring声明式事务管理属性
1、事务传播行为(Propagation)
当事务方法被另一个事务方法调用时,必须指定事务应该如何传播
如:执行事务方法method()1(事务x)之后,调用事务方法method2()(事务y),此时需要设置method()2方法的事务传播行为。
(1)事务的传播行为
①REQUIRED:如果有事务在运行,当前的方法就在这个事务内运行;否则就启动一个新的事务,并在自己的事务内运行
②REQUIRED_NEW:当前的方法必须启动新事务,并在自己的事务内运行;如果有事务正在运行,应该将它挂起。