Java 创建事务的方式

1、使用声明式事务 @Transactional

注意,@Transactional 只回滚RuntimeException和Error,而Exception、IOException是不会回滚的。
所以为了所有异常都能正常回滚,一般会写为:@Transactional(rollbackFor = Exception.class)

2、使用编程式事务

(1)PlatformTransactionManager

@Resource
private PlatformTransactionManager transactionManager;
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionAttribute());
transactionManager.rollback(status); // 手动回滚
transactionManager.commit(status); // 提交事务
// 也可创建回滚点,回滚部分内容
Object savepoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savepoint);

(2)TransactionTemplate

@Resource
private TransactionTemplate transactionTemplate;

transactionTemplate.execute(status1 -> {
	Object savepoint1 = status1.createSavepoint();
	status1.rollbackToSavepoint(savepoint1);
	status1.setRollbackOnly();
	return null;
});

(3)TransactionAspectSupport

注意,使用TransactionAspectSupport要加入注解@Transactional,不然TransactionAspectSupport.currentTransactionStatus()会扔出报错"No transaction aspect-managed TransactionStatus in scope"

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// 也可创建回滚点,回滚部分内容
Object savepoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savepoint);
posted @ 2025-12-03 21:26  巴啦啦飞上天  阅读(0)  评论(0)    收藏  举报