java何时何地调用TransactionSynchronizationManager。注册表同步()?
出于不同的原因,我们实现了自己的平台TransactionManager,它将委托给“真正的”TransactionManager
这样做的一个目标是能够在事务成功完成时执行索引(使用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;
}
}
我找不到任何关于如何进行这种同步的好文档
- 有没有更好的方法来检查我是否已经添加了同步李>
- 在事务管理器的getTransaction方法中这样做可以吗李>
- 我应该手动清理吗李>
共 (0) 个答案