通俗易懂的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
本文作者:会飞的稻草人丶
本文链接:https://www.cnblogs.com/dengxiaoyi/p/17283533.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!