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

  • 当通过不带@Transactional批注的Spring服务调用时,它返回假
  • 通过Spring服务使用@Transactional调用时,它返回真正的
  • 在我的旧方法(称为现有方法)中,它返回错误的

  • 我的问题:有没有更好的方法来检测交易是否处于 Activity 状态?

    最佳答案

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

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

    关于spring - 与使用TransactionSynchronizationManager.isActualTransactionActive()相比,有没有更好的方法来检测Spring DB事务是否处于事件状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7083095/

    10-12 14:52
    查看更多