1.事务三大接口
1.PlatformTransactionManager 事务管理器
2.TransactionDefinition 事务的一些基础信息,如超时时间、隔离级别、传播属性等
3.TransactionStatus 事务的一些状态信息,如是否一个新的事务、是否已被标记为回滚
2.PlatformTransactionManager
public interface PlatformTransactionManager {
//根据事务定义TransactionDefinition,获取事务
TransactionStatus getTransaction(TransactionDefinition definition);
//提交事务
void commit(TransactionStatus status);
//回滚事务
void rollback(TransactionStatus status);
}
2.1 事务定义接口TransactionDefinition
事务的定义包括: 事务的隔离级别,事务的传播属性,超时时间设置,是否只读
事务的隔离级别是数据库本身的事务功能,事务的传播属性则是spring为我们提供的功能
该接口的实现DefaultTransactionDefinition,默认的事务定义
public class DefaultTransactionDefinition implements TransactionDefinition, Serializable {
private int propagationBehavior = PROPAGATION_REQUIRED;
private int isolationLevel = ISOLATION_DEFAULT;
private int timeout = TIMEOUT_DEFAULT;
private boolean readOnly = false;
//略
}
1.事务的传播属性为PROPAGATION_REQUIRED,即当前没有事务的时候,创建一个,如果有则使用当前事务 2.事务的隔离级别采用底层数据库默认的隔离级别 3.超时时间采用底层数据库默认的超时时间 4.是否只读为false
2.2 事务接口定义 TransactionStatus
TransactionStatus它继承了SavepointManager接口,SavepointManager是对事务中上述保存点功能的封装,如下:
public interface SavepointManager {
Object createSavepoint() throws TransactionException;
void rollbackToSavepoint(Object savepoint) throws TransactionException;
void releaseSavepoint(Object savepoint) throws TransactionException;
}
TransactionStatus本身更多存储的是事务的一些状态信息
是否是一个新的事物 是否有保存点 是否已被标记为回滚
整个流程:
@Autowired
private PlatformTransactionManager transactionManager;
TransactionStatus status = null;
// 手动开启事务
status = transactionManager.getTransaction(new DefaultTransactionDefinition());
// 事务提交
transactionManager.commit(status)