声明事务@Transactional 默认是遇到 RuntimeException抛出则回滚,下面代码将范围扩大,遇到Exception被抛出就回滚(210行)。
如果主要代码被try catch 了,catch 里面如果没有抛出异常(232行),吞没了异常,那么事务会失效。这一点大家已经都知道了。
现在要讨论是另一种值得注意的情况是 : 加上了finally 之后,catch里面即使抛出了异常,事务也会失效。如下代码事务是有效的,但如果将 234 和236 行注释放开,再运行代码事务就会失效了