有没有更好的方法来检测一个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理器。