SpringBoot编程式事务

时间:2025-02-16 18:12:16

文章目录

    • 1. TransactionTemplate
    • 2. TransactionManager
      • 引入相关类
      • 注入事务管理器对象
      • 开启事务
      • 提交事务
      • 回滚事务
      • 例子如下:

在有些场景下,我们需要获取事务的状态,是执行成功了还是失败回滚了,那么使用声明式事务就不够用了,需要 编程式事务

在SpringBoot中,可以使用两种编程式事务

1. TransactionTemplate

看名字就知道,又是一个类似于RedisTemplate的模板类。使用很简单,是一个回调。

2. TransactionManager

步骤如下:

引入相关类

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

注入事务管理器对象

@Autowired
private PlatformTransactionManager transactionManager;

开启事务

DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition);

然后写业务代码;

提交事务

transactionManager.commit(transactionStatus);

回滚事务

transactionManager.rollback(transactionStatus);

例子如下:

方法体如下:


@Autowired
private PlatformTransactionManager transactionManager;

public void test() {
	DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
	defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
	TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition);

	try {
		// 数据库操作
		transactionManager.commit(transactionStatus);
	} catch (Exception e) {
		log.error("xxxx", e);
		transactionManager.rollback(transactionStatus);
	}
}