有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案