出于不同的原因,我们已经实现了自己的PlatformTransactionManager,它委托给“真正的”TransasctionManager。
这样做的一个目标是能够在事务成功完成时执行索引(使用Solr)。在事务内部,我们构建了一组需要编制索引的实体。如果事务提交,则刷新并处理该集合,如果它是回滚,则该集合将被丢弃。
我最近遇到过PlatformTransactionManager,它似乎很适合处理这个问题。 (fwiw:这个项目使用Spring的TransactionTemplate而不是@Transactional)。以下是它目前的处理方式:
@Override
public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
TransactionStatus transactionStatus = delegate.getTransaction(definition);
if (!TransactionSynchronizationManager.getSynchronizations().contains(this)) {
TransactionSynchronizationManager.registerSynchronization(this);
}
return transactionStatus;
}
@Override
public void afterCompletion(int status) {
switch (status) {
case STATUS_COMMITTED:
notifyCommit();
break;
case STATUS_ROLLED_BACK:
notifyRollback();
break;
}
}
我找不到有关如何进行此类同步的任何好文档。