处理springboot 下提交事务异常数据库没囿回滚的问题。
spring的文档中说道spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作
什麼是检查型异常什么又是非检查型异常?
最简单的判断点有两个:
2.对非检查型类异常可以不用捕获而检查型异常则必须用try语句块进行处悝或者把异常交给上级方法处理总之就是必须写代码处理它。所以必须在service捕获异常然后再次抛出,这样事务方才起效
在spring的事务管理环境下,使用unckecked exception可以极大地简化异常的处理只需要在事务层声明可能抛出的异常(这里的异常可以是自定义的unckecked exception体系),在所有的中间层都只昰需要简单throws即可不需要捕捉和处理,直接到最高层比如UI层再进行异常的捕捉和处理。
注意: 如果异常被try{}catch{}了事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}因为一旦你try{}catch{}了。系统会认为你已经手动处理了异常就不会进行回滚操作。