当检查的异常在事务中传播时会发生什么?

时间:2012-10-02 22:15:32

标签: spring spring-transactions

我知道当发生RuntimeExceptions时,事务管理器中的默认回滚策略会自动回滚。但是,如果我有一个允许传播的已检查异常,会发生什么?

1 个答案:

答案 0 :(得分:3)

  

但是,请注意Spring Framework的事务   默认情况下,基础架构代码仅标记事务   在运行时回滚,未经检查的异常;也就是说什么时候   抛出的异常是RuntimeException的实例或子类。   (错误也将 - 默认情况下 - 导致回滚。)已检查   不会导致从事务方法抛出的异常   在正在回滚的交易中。

Source

即使抛出了检查异常,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