spring 事务与Exception的关系

第一个问题:
Spring官方建议的通知事务管理器回滚事务的方式是从事务执行上下文中抛出一个异常,当这个异常沿着堆栈抛到事务管理器中的时候,会被 catch 住,由事务管理器决定是不是需要回滚事务。

如果你使用声明式事务管理,@Transactional,默认情况下所有的 RuntimeException 会触发回滚,所有的 checked Exception 不会触发回滚。你可以通过 rollback-for 和 no-rollback-for 来调整这个配置。如果你 catch 住异常,不再抛出,异常没办法到事务管理器中,不会触发回滚操作。

第二个问题:
多个事务方法放同一个事务方法,涉及到事务的传播机制,也就是 propagation,这个选项的具体配置你可以通过官方文档了解。可以控制调用另一个配置了事务的方法时如何参与当前事务。

同时当在一个事务里面,通过 this 调用当前对象里面的其他配置了事务的方法的时候,@Transactional的配置可能是无效的。具体要看你的事务管理器是通过代理方式还是CGLIB。

    原文作者:DamagedBoy
    原文地址: https://www.jianshu.com/p/d368954da9a9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞