Spring Tx 之“PlatformTransactionManager“的编程式事务分析

本文深入分析了Spring中的PlatformTransactionManager接口,探讨了如何实现getTransaction()、commit()和rollback()方法,以及事务的隔离级别、传播行为和超时设置。通过示例代码展示了事务管理的核心流程,并总结了在实际应用中的使用方式。
摘要由CSDN通过智能技术生成

在平常的工作会这样写一个模板事务,使用PlatformTransactionManager.getTransaction创建并开启一个事务;
try{}catch{}finally{}块中处理事务的提交、异常回滚等。
示例代码:

@Service
public class demo{
   
    @Resource()
    PlatformTransactionManager transactionManager;
    
    public int insert(Product product,ProdutExt ext){
   
        TransactionStatus ts = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
   
            //TODO 数据库操作
            transactionManager.commit(ts);
        }catch(Exception e){
   
            //异常时回滚
            transactionManager.rollback(ts);
            throw e;
        }finally {
   
            //如果事务没有处理,默认进行回滚
            if (!ts.isCompleted()) {
   
                transactionManager.rollback(ts);
            }
        }
    }
}

思前思后,一层一层扒下它的外纱,一层一层的看PlatformTransactionManager是如何管理事务的开启、提交与回滚的。

前述

Spring-TX模块中有三个重要的接口:

PlatformTransactionManager 事务管理器
TransactionStatus 事务状态
TransactionDefinition 事务定义

各类之间的类图:
类图

PlatformTransactionManager用于整个事务的创建、开启、提交、回滚操作;事务的定义由TransactionDefinition定义事务的隔离级别;TransactionStatus用于对新创建的事务进行管理。

PlatformTransactionManager 事务管理器

PlatformTransactionManager继承自TransactionManager接口,TransactionManager接口的作用只是用于标示类,没有任务的接口方法与字段;AbstractPlatformTransactionManagerPlatformTransactionManager进行了抽象,对方法进行了具体的实现;下面我们来看看源代码是什么样的吧。

PlatformTransactionManagerinterface源代码:

public interface PlatformTransactionManager extends TransactionManager {
   
    
    //1.创建一个事务并开启事务
	TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
			throws TransactionException;

   //2.提交事务
	void commit(TransactionStatus status) throws TransactionException;

   //3.回滚事务
	void rollback(TransactionStatus status) throws TransactionException;

}

如果实现getTransaction()

使用JDBC将如果开启一个事务呢?

//创建一个连接
JdbcConnection connection = ConnectionImpl.getInstance
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值