声明式事务

mac2026-02-28  8

声明式事务

1 事务与声明式事务的区别

1.事务:

把多个操作绑定在一起,要么全部成功,要么全部失败

2.声明式事务:

在程序中,指定开启或回滚事务的规则,程序根据设定好的规则,自动开启或回滚事务

2 声明式事务

2.1 我们第一步找到spring的配置文件
2.2 第二步我们就需要在你的标签里添加一下代码
<!-- 定义事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>

ref=dataSource:这个dataSource是配置我们spring和MyBatis整合配置数据源的、

详情请看文档的第三点:spring和mybatis整合

2.3 设置事务属性
<!-- 设置事务属性--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 声明事务属性,定义事务开启规则--> <tx:attributes> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice>

我们的事务属性这里就简约的说一下事务传播机制:

SUPPORTS:

表示如果存在一个事务,则支持当前事务,如果没有,则按非事务方式执行

REQUIRED:

表示如果存在一个事务,则支持当前事务,如果没有,则自己开启一个新的事务

补充:

REQuIRES_NEW:

表示总是开启一个新事务,如果一个事务已经存在,则将这个存在的挂起,开启新的事务

还有等等 比如NESTED....

而这个标签的name属性里面填写的是,你需要做的增删改查功能是什么需要开启事务传播机制

2.4 定义切面

因为我们事务是在spring增强的功能上实现的,所以我们还需要定义切面

<!-- 定义切面--> <aop:config> <!-- 定义切面--> <aop:pointcut id="serviceMethod" expression="execution(* com.t239.service..*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" /> </aop:config>

我们这就完成了声明式事务,我们还有一种方法就是使用注解形式

3 注解事务

我们做注解事务就更加简单一点:

3.1 首先我们第一步还是先定义事务管理器
<!-- 定义事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean>
3.2 我们第二步启动注解事务

将定义的事务管理器添加进去

<!-- 启动注解事务 --> <tx:annotation-driven transaction-manager="transactionManager" />
3.3 我们就可以在你的需要事务处理的方法前加注解

我们通过注解进行事务回滚,以及提交,注解如下:

@Transactional

将这个注解添加到类前面,这个类所有的方法有有事务回滚提交功能

将这个添加到方法前,就只能对方法使用

Transactional的属性不止一种,有很多比如:

@Transactional(propagation= Propagation.SUPPORTS) @Transactional(propagation=Propagation.REQUIRED)

等等等,这里就不一一解释说明了

最新回复(0)