当前位置: 首页 > news >正文

spring-TransactionTemplate 编程式事务

TransactionTemplate 是 Spring 框架提供的用于管理事务的一种方式。它提供了一种编程式的事务管理方法,允许开发者在代码中显式地控制事务的开始、提交或回滚。与使用 @Transactional 注解相比,TransactionTemplate 提供了更多的灵活性和控制力。

为什么不用 @Transactional

虽然 @Transactional 注解提供了一种简单的方式来声明事务边界,但在某些情况下,它的局限性可能会限制你的应用设计:

  1. 跨越服务边界:如果你的服务逻辑跨越了多个服务,那么使用 @Transactional 可能会变得复杂,因为每个服务可能有自己的事务边界。
  2. 更细粒度的控制TransactionTemplate 允许你在运行时动态地更改事务属性,比如隔离级别或传播行为。
  3. 异常处理:有时你可能希望根据特定的异常类型来决定是否回滚事务,而不仅仅是所有类型的异常。
  4. 性能考量:在一些性能敏感的应用中,你可能希望避免代理带来的开销(当使用基于 AOP 的 @Transactional 时),而是选择更轻量级的方法,如 TransactionTemplate

总之,TransactionTemplate@Transactional 都有它们各自的适用场景。选择哪一个取决于你的具体需求以及对事务管理的控制程度。

TransactionTemplate 代码示例
执行事务无返回

@Autowired
private TransactionTemplate transactionTemplate;transactionTemplate.executeWithoutResult(new Consumer<TransactionStatus>() {@Overridepublic void accept(TransactionStatus transactionStatus) {try {// 如果操作成功,不抛出异常,事务将提交memberService.save(member);System.out.println("1/0 = " + 1 / 0);orderItemService.save(orderItem);} catch (Exception e) {// 如果操作失败,抛出异常,事务将回滚transactionStatus.setRollbackOnly();}}});

 执行事务有返回

@Autowired
private TransactionTemplate transactionTemplate;String rr = transactionTemplate.execute(new TransactionCallback<String>() {@Overridepublic String doInTransaction(TransactionStatus status) {try {memberService.save(member);System.out.println("1/0 = " + 1 / 0);orderItemService.save(orderItem);return "ok";} catch (Exception e) {//回滚status.setRollbackOnly();return null;}}});

http://www.lryc.cn/news/438709.html

相关文章:

  • 中考全国45套(全国教育发达地区中考试卷)
  • 嵌入式Linux学习笔记(5)-进程间常见通讯方式(c语言实现)
  • 【移动端】菜单的自动展开与收回
  • Java获取Object中Value的方法
  • 集群聊天服务器项目【C++】(二)Json的简单使用
  • 班迪录屏和这三款录屏工具,一键操作,太方便了!
  • DAY60Bellman_ford 算法
  • Dubbo SPI源码
  • 《C++代码高度优化之双刃剑:避免过度优化引发的“暗雷”》
  • javascript网页设计案例
  • 初阶数据结构【TOP】- 11.普通二叉树的介绍 - 1. (细致,保姆~~!)
  • 【pyenv】pyenv安装版本超时的解决方案
  • 【新片场-注册安全分析报告-无验证方式导致安全隐患】
  • 新160个crackme - 057-bbbs-crackme04
  • 车机中 Android Audio 音频常见问题分析方法实践小结
  • 湘大 OJ 代码仓库
  • Ruoyi Cloud K8s 部署
  • OpenGL Texture C++ Camera Filter滤镜
  • 基于Sobel算法的边缘检测设计与实现
  • java:练习
  • 大数据中一些常用的集群启停命令
  • Golang、Python、C语言、Java的圆桌会议
  • C语言编译原理
  • 【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
  • Apache POI 学习
  • 福建科立讯通信 指挥调度管理平台 SQL注入漏洞
  • 4.qml单例模式
  • CACTI 0.8.7 迁移并升级到 1.2.7记录
  • OrionX vGPU 研发测试场景下最佳实践之Jupyter模式
  • 国风编曲:了解国风 民族调式 五声音阶 作/编曲思路 变化音 六声、七声调式