解决spring 事务管理默认不支持SQLException等运行时异常

Posted 彼岸的命運╰'

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决spring 事务管理默认不支持SQLException等运行时异常相关的知识,希望对你有一定的参考价值。

     公司同事在定位一个bug时,发现spring默认的事务只支持运行时异常的回滚,对于像SQLException这样的非运行时异常,默认的事务机制不能处理,于是找了下解决的办法:
    1、在捕获SQLException的时候,抛出一个RuntimeException及其子类,例如:
     try {
               xxx
        } catch (Exception e) {
               throw new ModuleException();
       }
这里的ModuleException是公司自己定义继承了RuntimeException的类。
   2、在spring中添加捕获特定异常的配置



这里因为RuntimeException是Exception的一个子类,所以直接捕获所有的exception也是可以达到出现SQLException时事务回滚的目的。

以上是关于解决spring 事务管理默认不支持SQLException等运行时异常的主要内容,如果未能解决你的问题,请参考以下文章

Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?

spring事务传播机制和隔离级别

Spring本地事务

Spring对事务的支持

你了解的Spring 的 @Transactional 注解控制事务,失效场景知多少?

Spring Boot连接MySQL报错“Internal Server Error”的解决办法