事务 PlatformTransactionManager

这篇博客详细介绍了Spring中的事务管理,重点讲解了PlatformTransactionManager接口及其相关概念,包括TransactionDefinition和TransactionStatus。讨论了事务的ACID特性、并发问题及解决方案,并对比了编程式和声明式事务管理的优缺点,强调了@Transactional注解的使用注意事项。
摘要由CSDN通过智能技术生成

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值