场景:
现在我有2个Service, ServiceA有methodA. ServicceB中有methodB。
现在ServiceA中的methodA调用ServiceB中的methodB,然后methodB报了异常,并抛出
然后我在methodA中catch到了这个异常,并想把这个异常信息,写入到数据库中。
结果Transaction rolled back because it has been marked as rollback-only
相当于就是serviceA中在commit的时候发现了serviceB中有回滚标记,有没有方法,先让ServiceB中的回滚掉,然后ServiceA成功提交
你需要定义serviceB的methodB方法的事务传播属性为Propagation.REQUIRES_NEW。
建议了解一下spring的事务传播机制。
如果不仔细了解,你以后还会发现很多千奇百怪的事务问题,这会给你的开发造成困扰。
比如:定义了事务却没有生效,本以为会回滚,但是却提交了一部分。
可以看一下我的博客http://www.bestmazha.com/?p=128 ,这里有我学习过程中出现的问题。