关于spring管理事务问题
欢迎使用Markdown编辑器
注意:前提一定是每个service都开启了事务,并且隔离级别为如果有事务就为同一个
问题描述:情景描述:service–a service–b service–c
共有三个服务,并且都开启事务,其中c方法中调用a、b。
情况一:c调用顺序为a-b,假如a中异常,并且自己进行捕获处理,那么不影响b的操作。a中操作将会回滚,但是b中操作会执行
情况二:c调用顺序为b-a,假如a中异常,并且自己进行捕获处理,那么不影响b的操作。a中操作将会回滚,但是b中操作会执行
情况三:a中抛出异常a中不做处理,b没有异常,c调用顺序为a-b,并用trycatch将ba包裹。结果,a、b都执行不成功,并抛出异常org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
情况四:a中抛出异常在a中不做处理,b没有异常,c调用顺序为b-a,并用trycatch将ba包裹,捕获大的异常。结果,a、b都执行不成功,并抛出异常
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
情况五:c调用顺序为b-a,假如a中异常,并且自己没有进行捕获处理 。其中刚在c中将a异常捕获,a中操作将会回滚,但是b中操作会执行
情况六:c调用顺序为a-b,假如a中异常,并且自己没有进行捕获处理 。其中刚在c中将a异常捕获,a中操作将会回滚,但是b中操作会执行