我有一些遗留代码,我现在正试图在Spring下重用。这段代码深深地嵌套在其他代码中,因此重新设计并不常用,在许多情况下都会调用,其中只有一些是通过Spring实现的。我想做的是使用Spring事务,如果已经启动了;否则,继续使用现有(传统)数据库连接机制。我们的第一个想法是让我们的遗留类成为bean并使用注入的TransactionPlatformManager
,但这似乎没有任何方法与我们的情况密切相关。一些研究表明Spring有一个名为TransactionSynchronizationManager
的类,它有一个静态方法isActualTransactionActive()
。我的测试表明,这种方法是检测Spring事务是否处于活动状态的可靠方法:
@Transactional
注释的情况下通过Spring服务调用时,它返回false @Transactional
通过Spring服务调用时,它返回true 我的问题:有没有更好的方法来检测交易是否有效?
答案 0 :(得分:47)
没有比TransactionSynchronizationManager.isActualTransactionActive()
更好的方法了。它是spring用来处理事务的实用方法。虽然不建议在您的代码中使用它,但对于某些特定情况,您应该 - 这就是为什么它是公开的。
另一种方法可能是使用实体管理器/会话/连接并检查是否存在现有事务,但我更喜欢同步管理器。