发布时间:2023-01-18 文章分类:编程知识 投稿人:李佳 字号: 默认 | | 超大 打印

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:当前的方法必须启动新事务,并在自己的事务内运行;如果有事务正在运行,应该将它挂起。