仅当确定已提交但在提交之前拦截事务
Context 是 Java - JPA 与 Hibernate 和 Spring。
让我们以两阶段提交协议的场景为例(但仅使用一个资源):
从应用程序提交查询
投票是/否(在我们的例子中来自数据库)
3.1. 如果是,则来自数据库
3.1.1. (在代码中进行回调) - 不是协议的一部分
3.1.2. 提交到数据库
3.2 如果不是
3.2.1 回滚到数据库
我想要的是一种在代码中从3.1.1进行回调的方法,但只有当知道事务将被提交,但在实际提交之前。此外,如果在此处引发异常,则应回滚事务。
使用来自Spring的(*)允许您在提交/完成事务之前或提交/完成之后拦截事务。TransactionSynchronization
-
beforeCommit()
回调表示在调用方法后仍可能发生回滚; -
beforeComplete()
即使事务失败也调用 -
afterCommit/Complete()
在事务实际提交到数据库并且无法回滚之后调用。
现在我看了,似乎我想要的是一个完整的两阶段提交协议中的另一个;但我想知道春季是否有解决方法。不同之处在于,在回调中完成的调用无法回滚。
(*)从Spring 4.2非常简单,它很好地抽象了@TransactionalEventListener
TransactionPhase
TransactionSynchronization