Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有比使用TransactionSynchronizationManager.isActualTransactionActive()更好的方法来检测Spring DB事务是否处于活动状态?_Spring_Transactions - Fatal编程技术网

有没有比使用TransactionSynchronizationManager.isActualTransactionActive()更好的方法来检测Spring DB事务是否处于活动状态?

有没有比使用TransactionSynchronizationManager.isActualTransactionActive()更好的方法来检测Spring DB事务是否处于活动状态?,spring,transactions,Spring,Transactions,我有一些遗留代码,我现在正试图在Spring下重用它们。此代码深入嵌套在其他代码中,因此重新设计是不实际的,在许多情况下都会调用它,只有一些情况是通过Spring调用的。我想做的是使用Spring事务(如果已经启动);否则,请继续使用现有(传统)db连接机制。我们的第一个想法是将遗留类变成bean,并使用注入的TransactionPlatformManager,但这似乎没有任何与我们的情况相关的方法。一些研究表明Spring有一个名为TransactionSynchronizationMana

我有一些遗留代码,我现在正试图在Spring下重用它们。此代码深入嵌套在其他代码中,因此重新设计是不实际的,在许多情况下都会调用它,只有一些情况是通过Spring调用的。我想做的是使用Spring事务(如果已经启动);否则,请继续使用现有(传统)db连接机制。我们的第一个想法是将遗留类变成bean,并使用注入的
TransactionPlatformManager
,但这似乎没有任何与我们的情况相关的方法。一些研究表明Spring有一个名为
TransactionSynchronizationManager
的类,它有一个静态方法
isActualTransactionActive()
。我的测试表明,该方法是检测Spring事务是否处于活动状态的可靠方法:

  • 当通过Spring服务调用而没有
    @Transactional
    注释时,它返回false
  • 使用
    @Transactional
    通过Spring服务调用时,返回true
  • 在我的名为existing way的遗留方法中,它返回false
我的问题:有没有更好的方法来检测事务是否处于活动状态?

没有更好的方法了。它是spring用来处理事务的实用方法。虽然不建议在代码中使用它,但对于某些特定情况,您应该使用它-这就是为什么它是公开的

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