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

创建 TransactionStatus

在Spring框架中,TransactionStatus 是一个接口,通常由事务管理器(如 PlatformTransactionManager)在开启事务时自动创建,而不是由开发者直接实例化。如果你需要在代码中操作事务状态,应通过以下标准方式:


正确获取 TransactionStatus 的步骤:

  1. 注入事务管理器
    在Spring Bean中注入 PlatformTransactionManager(如 DataSourceTransactionManagerJpaTransactionManager 等)。

  2. 定义事务属性
    使用 TransactionDefinition 指定事务传播行为、隔离级别等。

  3. 获取 TransactionStatus
    调用 getTransaction() 方法获取事务状态对象。

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;@Service
public class YourService {private final TransactionTemplate transactionTemplate;// 通过构造函数注入(推荐)public YourService(PlatformTransactionManager transactionManager) {this.transactionTemplate = new TransactionTemplate(transactionManager);}public void executeInTransaction() {// 使用 TransactionTemplate 简化操作transactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {try {// 此处编写业务逻辑// 通过 status 控制事务:// status.setRollbackOnly(); // 标记事务回滚} catch (Exception ex) {status.setRollbackOnly(); // 出现异常时回滚}}});}
}

手动创建 TransactionStatus(仅限测试/高级场景)

如果你需要在非标准环境​(如单元测试)中模拟 TransactionStatus,可以使用 Spring 的实现类 DefaultTransactionStatus。但生产代码中不推荐直接创建。

import org.springframework.transaction.support.DefaultTransactionStatus;
import org.springframework.transaction.support.SimpleTransactionStatus;// 简单实现(无实际事务控制)
TransactionStatus status = new SimpleTransactionStatus();// 高级实现(需要复杂参数,通常由内部事务管理器使用)
DefaultTransactionStatus status = new DefaultTransactionStatus(transactionObject,  // 事务对象(如 ConnectionHolder)true,               // isNewTransactionfalse,              // newSynchronizationtrue,               // readOnlyfalse,              // debugsuspendedResources  // 挂起的资源
);

关键说明:

  • ✅ ​标准实践​:通过 PlatformTransactionManagerTransactionTemplate 获取事务状态。
  • ⚠️ ​不要直接 new​:TransactionStatus 是事务生命周期的内部状态,手动实例化会破坏事务管理。
  • 🔧 ​调试场景​:单元测试中可使用 SimpleTransactionStatus 模拟状态。

遵循 Spring 的事务管理机制是确保数据一致性的正确方式。

http://www.dtcms.com/a/266174.html

相关文章:

  • 【STM32实践篇】:I2C驱动编写
  • NumPy 安装使用教程
  • Debian-10-standard用`networking`服务的`/etc/network/interfaces`配置文件设置多网卡多IPv6
  • 【2.4 漫画SpringBoot实战】
  • CMake之CMakeLists.txt语法规则
  • 网安系列【1】:黑客思维、技术与案例解析
  • DDD实战:CQRS模式在电商报表系统中的高性能实践
  • RNN案例人名分类器(完整步骤)
  • MySQL 8.0 OCP 1Z0-908 题目解析(17)
  • POST请求url放参数场景-笔记
  • Spring SseEmitter 系统详细讲解
  • WPF学习笔记(16)树控件TreeView与数据模板
  • WPF学习笔记(22)项面板模板ltemsPanelTemplate与三种模板总结
  • spring-ai-alibaba 1.0.0.2 学习(八)——接入阿里云信息查询服务
  • 深度学习-逻辑回归
  • RJ45 连接器(水晶头)的引脚定义
  • 从0到1解锁Element-Plus组件二次封装El-Dialog动态调用
  • Gemini CLI初体验
  • 二叉树题解——二叉树的层序遍历【LeetCode】队列实现
  • Java中Stream流的使用
  • Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景
  • 设计模式(九)
  • 魔术方法__call__
  • Redis缓存架构实战
  • Selenium Base全新升级版:新一代自动化框架实战解析
  • Python 的内置函数 range
  • 高边驱动 低边驱动
  • 黑暗中的爆破(船讯网Ais爬虫暨爬虫实战js逆向学习经验分享)
  • 车载以太网-IP 掩码 vlan 端口
  • SciPy 安装使用教程