简介
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 注解)是更常用和更推荐的方式,因为它更简单、更易于维护。