在我的春季配置中,我为两个不同的数据库定义了两个事务管理器。在春季,有没有一种方法可以检查运行时是否在事务内部运行了给定的方法,其次(更重要的是)是从哪个事务管理器创建此事务的。
最佳答案
您可以使用TransactionSynchronizationManager
。它有很多方法可以告诉您事务是否处于活动状态,以及它的名字是什么。您可以获取资源映射(getResourceMap()
)并验证其中的内容。
该类中的所有内容均为ThreadLocal
,因此它将为您提供有关当前事务的信息。
但是,文档说:
由资源管理代码而非典型的应用程序代码使用。
目前尚不清楚为什么需要这些信息。 Spring使用声明式事务,因此实际代码不必知道(和处理)事务行为。如果您需要在代码中区分事务管理器,则可能有些问题。
关于java - 如何查看在Spring 3.0中从哪个TransactionManager给定的交易中创建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3555575/