TransactionStatus学习

简介

TransactionStatus 是 Spring 框架中用于表示事务状态的一个接口。它提供了一系列方法来查询和控制事务的执行状态。当你在 Spring 中使用编程式事务管理时,这个接口会非常有用。

TransactionStatus 接口的主要方法包括:

  • isNewTransaction(): 检查当前事务是否是新事务。
  • hasSavepoint(): 检查当前事务是否有一个保存点。
  • isCompleted(): 检查当前事务是否已完成。
  • isRollbackOnly(): 检查当前事务是否已被标记为回滚。
  • setRollbackOnly(): 设置当前事务为回滚状态。
  • createSavepoint(): 在当前事务中创建一个保存点。
  • rollbackToSavepoint(Object savepoint): 将当前事务回滚到指定的保存点。
  • releaseSavepoint(Object savepoint): 释放之前创建的保存点。

通常,你不会直接创建 TransactionStatus 的实例,而是通过 PlatformTransactionManager 的 getTransaction 方法获取。这个方法返回一个 TransactionStatus 对象,你可以使用这个对象来查询和控制事务。

源码

public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable {
	//当前事务是否有一个保存点
	boolean hasSavepoint();
	//事务刷新
	@Override
	void flush();

}
public interface TransactionExecution {

	/**
	当前事务是否为新事务
	 */
	boolean isNewTransaction();

	/**
	 * Set the transaction rollback-only. This instructs the transaction manager
	 * that the only possible outcome of the transaction may be a rollback, as
	 * alternative to throwing an exception which would in turn trigger a rollback.
	 */
	void setRollbackOnly();

	/**
	 * 当前事务是否已被标记回滚
	 */
	boolean isRollbackOnly();

	/**
	 *当前事务是否已经完成,无论事成功,还是失败 都算是执行完成
	 */
	boolean isCompleted();

}

示例

import org.springframework.transaction.PlatformTransactionManager;  
import org.springframework.transaction.TransactionStatus;  
import org.springframework.transaction.support.DefaultTransactionDefinition;  
  
// ...  
  
PlatformTransactionManager transactionManager = ...; // 获取 PlatformTransactionManager 实例  
  
DefaultTransactionDefinition def = new DefaultTransactionDefinition();  
TransactionStatus status = transactionManager.getTransaction(def);  
  
try {  
    // 执行数据库操作  
    // ...  
  
    // 提交事务  
    transactionManager.commit(status);  
} catch (Exception ex) {  
    // 发生异常,回滚事务  
    transactionManager.rollback(status);  
    throw ex;  
}

在这个示例中,我们首先通过 PlatformTransactionManager 获取一个 TransactionStatus 对象,然后执行数据库操作。如果一切正常,我们就提交事务;如果发生异常,我们就回滚事务。

需要注意的是,虽然编程式事务管理提供了更细粒度的控制,但在大多数情况下,声明式事务管理(通过 @Transactional 注解)是更常用和更推荐的方式,因为它更简单、更易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值