在我的春季配置中,我为两个不同的数据库定义了两个事务管理器。在春季,有没有一种方法可以检查运行时是否在事务内部运行了给定的方法,其次(更重要的是)是从哪个事务管理器创建此事务的。

最佳答案

您可以使用TransactionSynchronizationManager。它有很多方法可以告诉您事务是否处于活动状态,以及它的名字是什么。您可以获取资源映射(getResourceMap())并验证其中的内容。

该类中的所有内容均为ThreadLocal,因此它将为您提供有关当前事务的信息。

但是,文档说:


  由资源管理代码而非典型的应用程序代码使用。


目前尚不清楚为什么需要这些信息。 Spring使用声明式事务,因此实际代码不必知道(和处理)事务行为。如果您需要在代码中区分事务管理器,则可能有些问题。

关于java - 如何查看在Spring 3.0中从哪个TransactionManager给定的交易中创建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3555575/

10-10 07:29