我正在使用@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中的一些对象放在静态上下文中,并在提交后需要利用这些对象..这就是我的想法
3条答案
按热度按时间yptwkmov1#
唯一的方法就是在方法中创建Transaction,方法是通过Spring Application Context获取Transaction Manager,并使用新的
TransactionDefinition
调用getTransaction()
,该新的TransactionDefinition
包含一个可以控制的自定义ID。我刚刚为您的逻辑进行了设置,但您在完成后只需手动commit()
或rollback()
事务x33g5p2x2#
我有一个和你一样的问题,没有解决方案,可能的办法是每个Spring事务绑定到一个线程,所以使用线程本地存储,或者使用唯一的线程ID作为密钥。对于这些解决方案,你必须确保在提交时,TX特定的信息将从线程本地存储中清除。
koaltpgm3#
您可以使用
事务方面支持.当前事务状态().哈希代码()
获取事务的唯一ID