本文主要是介绍通过Spring层面进行事务回滚的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下...
Spring 中事务可以分为声明式事务和编程式事务,那么解下来就从这两方面说一说在 Spring 层面个怎么进行回滚
声明式事务回滚:
1. 基础注解配置
通过@Transactional注解实现自动回滚,默认对RuntimeException和Error生效
@Transactional
public void transferMoney(Account from, Account to, double amount) {
from.withdraw(amount); // 扣款
to.deposit(amount); // 存款
// 若在此处抛出RuntimeException,事务自动回滚
}
2. 指定回滚异常类型
可以通过 @Transactional 注解的 rollbackFor 参数扩展回滚范围到受检异常
@Transactional(rollbackFor = {SQLException.class, BusinessException.class})
public void processOrder(Order order) throws CustomException {
// 抛出SQLException或BusinessException时回滚
}
需要显示声明受检查异常类型,否则不会滚
3. 不回滚特殊场景
使用 noRollbackFor 参数排除特定异常
@Transactional(noRollbackFor = {ValidationException.class})
public void validateData(Data data) {
// ValidationException不会触发回滚
}
编程式事务回滚:
1. 使用 TransactionTemplate 实现编程式事务
@Autowired private TransactionTemplate transactionTemplate; public void BATchProcess() { transactionTemplate.execute(status -> { try { // 业务操作... if (errorCondition) status.setRollbackOnly(); return result; } catch (Exception e) { status.setRollbackOnly(); throw e; } }); }
2. 使用 PlatformChina编程TransactionManager 实现编程式事务
直接操作事务管理器实现完全控制
@Autowired
private PlatformTransactionManager transactionManager;
public void complexOperation() {
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
China编程 try {
// 业务操作...
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
throw new ServiceException("操作失败", e);
}
}
嵌套事务与传播行为相关的异常回滚:
1. 嵌套事务(PROPAGATION_NESTED)
子事务作为父事务的保China编程存点,可部分回滚
@Transactional(propagation = Propagation.REQUIRED)
public void parentMethod() {
// 主业务逻辑
childMethod(); // 嵌套子事务
}
@Transactional(propagation = Propagation.NESTED)
public void childMethod() {
www.chinasem.cn// 子事务操作,失败仅回滚子操作
}
2.传播行为控制
通过传播策略控制事务边界:
REQUIRES_NEW:始终新建事务
MANDATORY:必须存在父事务
NOT_SUPPORTED:非事务执行
通过 xml 的方式配置全局回滚规则:
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="save*" rollback-for="Java.lang.Exception"/>
<tx:method name="update*" no-rollback-for="BusinessWarning"/>
</tx:attributes>
</tx:advice>到此这篇关于通过Spring层面进行事务回滚的实现的文章就介绍到这了,更多相关Spring事务回滚内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于通过Spring层面进行事务回滚的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!