有没有更好的方法来检测一个Spring DB事务是否比使用TransactionSynchronizationManager.isActualTransactionActive()有效?

我有一些遗留的代码,我现在试图在Spring下重用。 这段代码深深地嵌套在其他代码中,所以重新devise并不实际,在许多情况下被调用,其中只有一些是通过Spring。 我想要做的是使用Spring交易,如果已经开始了; 否则,继续使用现有的(遗留)数据库连接机制。 我们的第一个想法是使我们的遗留类成为一个bean,并使用一个注入的TransactionPlatformManager ,但似乎没有任何方法与我们的情况密切相关。 一些研究表明,Spring有一个名为TransactionSynchronizationManager的类,它有一个静态方法isActualTransactionActive() 。 我的testing表明这种方法是检测Spring事务是否有效的可靠方法:

  • 当通过没有@Transactional注解的Spring服务调用时,它返回false
  • 当通过@Transactional通过Spring服务调用时,它返回true
  • 在我的传统方法称为现有的方式,它返回false

我的问题:有没有更好的方法来检测交易是否有效?

没有比TransactionSynchronizationManager.isActualTransactionActive()更好的方法。 这是spring用来处理交易的实用方法。 虽然在你的代码中使用它是不可取的,但是对于一些特定的情况你应该 – 这就是为什么它是公开的。

另一种方法可能是使用实体pipe理器/会话/连接,并检查有没有现有的事务,但我更喜欢同步pipe理器。