通过Spring层面进行事务回滚的实现

2025-04-14 16:50

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



http://www.chinasem.cn/article/1154214

相关文章

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的