查找Spring @Transactional的事务ID

5

我正在使用 @Transactional 来管理事务

  @Override
  @Transactional
  public List<FooBo> save(Foo foo, Foo foo2) {
    logger.debug(() -> String.format("FooService.save()"));
    repository.save(foo);
    return repository1.save(foo2);
  }

在使用TransactionAspectSupport.currentTransactionInfo()时,我无法找到事务ID。

是否还有其他方法(如果Spring维护事务的唯一ID)?

更新:我的场景是,我想根据事务ID在静态上下文中放置一些信息。并且在事务提交后需要这些信息。

例如...基于事务ID,我想将一些对象放入静态上下文中的映射中,并在提交后利用这些对象。这就是我的想法。


什么是交易ID? - Alan Hay
@AlanHay 我假设每个交易都有唯一的ID。我需要跟踪每个交易。 - Shahid Ghafoor
你为什么需要跟踪交易?你的用例是什么?Spring不会生成任何东西,它将其留给底层的事务解决方案。 - M. Deinum
@M.Deinum,我已经更新了我的问题。谢谢。 - Shahid Ghafoor
交易ID是您的交易bean的名称。 - akuma8
1
@akuma8,但是对于多线程来说情况是一样的。如果我在静态上下文中使用它来保存一些信息,显然对于多个线程,结果将是错误的。 - Shahid Ghafoor
3个回答

0
我和你有类似的问题,看到没有解决方案,可能的解决方法是每个Spring事务都绑定到一个线程上,因此可以使用线程本地存储或使用唯一的线程ID作为键。对于这些解决方案,您必须确保在提交时从线程本地存储中清除TX特定信息。

0
唯一的方法可能是在方法中通过 Spring 应用程序上下文获取事务管理器并调用 getTransaction() 来创建事务,其中包含一个自定义 ID,您可以控制。然后,您可以使用刚设置的 ID 用于逻辑,但是完成后必须手动 commit()rollback() 事务。

事务定义中的“自定义可控制ID”是什么?我找不到任何与该描述匹配的类属性。 - mxdsp

0

你可以使用

TransactionAspectSupport.currentTransactionStatus().hashCode()

获取交易的唯一标识符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接