通俗易懂的spring事务的传播机制讲解!
spring事务理解
前提两个都是事务的方法,并且两个方法会进行调用,调用方统一使用required
举例有两个方法:

- required
如果当前上下文存在事务,被调用方则加入该调用方的事务,没有的话就新建(指单独被调用时)一个事务
- supports
支持事务,上下文中有事务,被调用方则加入该事务,单独被调用时则没有事务
- mandatory
必须有事务,上下文有事务,被调用方则加入该事务,单独调用时直接抛异常,因为这时候没有一个活动的事务
- requires_new
被调用方会单独开启事务,调用方存在事务则将调用方挂起来,两个事务互不相干
- not_supported
总是非事务的方式执行,调用方调用时会直接被挂起
- never
总是非事务的方式执行,调用方调用时会直接抛异常
- nested
嵌套子事务,外层影响内层,内层不影响外层,除非外层try-catch并在catch中向外抛出异常
2.使用TransactionTemplate实现编程式事务
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
springboot中引入mybatis-spring-boot-starter依赖包即可。mybatis-spring-boot-starter依赖包中包含了spring-boot-starter-jdbc的依赖,spring-boot-starter-jdbc中包含DataSourceTransactionManager事务管理器以及自动注入配置类DataSourceTransactionManagerAutoConfiguration。
代码中使用,在使用bean中注入TransactionTemplate即可:
@Service
public class TestServiceImpl {
@Resource
private TransactionTemplate transactionTemplate;
public Object testTransaction() {
//数据库查询
dao.select(1);
return transactionTemplate.execute(status -> {
//数据库新增
dao.insert(2);
dao.insert(3);
return new Object();
});
}
}
参考文章:
https://blog.csdn.net/weixin_39625809/article/details/80707695
https://blog.csdn.net/yzh_1346983557/article/details/118492783

浙公网安备 33010602011771号