Spring Transaction Manager回滚SQL事务时如何通知应用程序?

时间:2016-11-25 20:50:40

标签: spring spring-transactions

在基于Spring的应用程序中,事务管理器负责提交或回滚SQL事务。 我的应用程序对持久数据的某些部分使用自定义缓存。 这个缓存不是由Spring和Hibernate管理的。

如果SQL事务遇到错误并且必须回滚,那么也应该回滚缓存修改。

我的问题是,当Spring事务管理器回滚事务时,如何注册一个事件监听器或回调函数调用我的cache.evict()方法?

2 个答案:

答案 0 :(得分:2)

您可以使用TransactionSynchronizationAdapter。作为参考,您可以查看:Spring - commit JMS Transaction after JPA transaction

在链接中给出的答案中,同步已注册afterCommit。在您的情况下,它将是afterCompletion。在该实现中,您需要检查事务是否处于回滚状态并执行高速缓存驱逐。

答案 1 :(得分:0)

有很多方法可以做到这一点......

  1. 如果您需要,可以使用应用程序事件... Application Events in Spring Framework 4.2
  2. 您可以抛出自定义运行时异常,并且可以在异常处理程序中处理它(如果您使用的是Spring MVC)。但在这里我不建议做任何重要的操作,例如清除缓存... Exception handling in Spring MVC
  3. 您可以使用#1和#2的组合。您可以发送一个事件,该事件最终会抛出您在UI中处理它的运行时异常(spring mvc或您使用的任何内容)。 我就是这样做的
  4. 您可以抛出异常,任何调用您的bean的人都会获得您想要的自定义事务异常,并且必须处理通知......我不建议这样做