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

在平常的工作会这样写一个模板事务,使用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring事务编程是指使用编程来管理和控制事务的方。通过编写代码来手动控制事务的开始、提交和回滚操作。 在Spring中,我们可以使用编程事务来管理事务。这种方需要在代码中显地声明事务的开始和结束,并进行相应的提交或回滚操作。相比于声明事务编程事务需要更多的代码编写和管理,但它也提供了更大的灵活性和精确控制。 在编程事务中,Spring提供了一些API来支持事务操作,比如PlatformTransactionManagerTransactionTemplate。通过使用这些API,我们可以在代码中定义事务的开始和结束,以及事务的提交和回滚。 编程事务的使用场景通常是在需要更细粒度的事务控制或者需要在事务中执行额外的逻辑时使用。例如,在某些情况下,我们可能需要根据特定的业务逻辑判断来决定是否回滚事务,这时编程事务就能提供更大的灵活性。 总结来说,Spring事务编程是一种通过编写代码来手动控制事务的方,它提供了更大的灵活性和精确控制,但也需要更多的代码编写和管理。它适用于需要更细粒度事务控制或者需要在事务中执行额外逻辑的场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spring 事务编程实践](https://blog.csdn.net/itguangit/article/details/127687796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值