查找spring @Transactional的事务ID

46qrfjad  于 2023-01-17  发布在  Spring
关注(0)|答案(3)|浏览(948)

我正在使用@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,我想将Map中的一些对象放在静态上下文中,并在提交后需要利用这些对象..这就是我的想法

yptwkmov

yptwkmov1#

唯一的方法就是在方法中创建Transaction,方法是通过Spring Application Context获取Transaction Manager,并使用新的TransactionDefinition调用getTransaction(),该新的TransactionDefinition包含一个可以控制的自定义ID。我刚刚为您的逻辑进行了设置,但您在完成后只需手动commit()rollback()事务

x33g5p2x

x33g5p2x2#

我有一个和你一样的问题,没有解决方案,可能的办法是每个Spring事务绑定到一个线程,所以使用线程本地存储,或者使用唯一的线程ID作为密钥。对于这些解决方案,你必须确保在提交时,TX特定的信息将从线程本地存储中清除。

koaltpgm

koaltpgm3#

您可以使用
事务方面支持.当前事务状态().哈希代码()
获取事务的唯一ID

相关问题