本文主要是介绍通过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层面进行事务回滚的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!