Spring嵌套事务(遇坑总结)

      之前在解决一个线上问题时,发现一个用户在批量导入员工excel时,不光表格中新增的员工没有导入成功,其中原有存在的也被删除掉了,但是根据spring事务的原则,和系统中的业务逻辑(只有插入成功之后才会返回正常结果,否则抛出异常)若报错则会抛异常回滚,若正常执行的话也不会存在只有删除没有插入的操作。

所以后期怀疑是嵌套事务的原因:

REQUIRED

spring默认的事务传播行为就是它。

支持事务。如果业务方法执行时已经在一个事务中,则加入当前事务,否则重新开启一个事务。

外层事务提交了,内层才会提交。

内/外只要有报错,他俩会一起回滚。

 

只要内层方法报错抛出异常,即使外层有try-catch,该事务也会回滚!

因为内外层方法在同一个事务中,内层只要抛出了异常,这个事务就会被设置成rollback-only,即使外层try-catch内层的异常,该事务也会回滚。

但是虽然是嵌套事务但是并没有在内层事务增加try catch捕获异常,在外层就算加了也是没用的。。最后发现插入操作的是一个 @Async修饰的异步方法!!!尴尬。。。。

你可能感兴趣的:(Spring嵌套事务(遇坑总结))