我知道当发生RuntimeExceptions时,事务管理器中的默认回滚策略会自动回滚。但是,如果我有一个允许传播的已检查异常,会发生什么?
答案 0 :(得分:3)
但是,请注意Spring Framework的事务 默认情况下,基础架构代码仅标记事务 在运行时回滚,未经检查的异常;也就是说什么时候 抛出的异常是RuntimeException的实例或子类。 (错误也将 - 默认情况下 - 导致回滚。)已检查 不会导致从事务方法抛出的异常 在正在回滚的交易中。
即使抛出了检查异常,Spring也会将事务提交,就好像一切都很好 如果需要,您可以在已检查的例外情况下配置回滚 喜欢
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="false" rollback-for="AnyCheckedException"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
在抛出AnyCheckedException
时执行回滚。
这可能会有所帮助:Spring transaction management with checked and unchecked exception