我有两个交易经理,如果有可能获得已经使用的那个,我很好奇。
更具体地说,underlyingMethod(..)
如何找出使用了哪个transactionManager(不向其发送附加参数“transactionManagerName / Ref”):
@Transactional("transactionManager1")
public void transactionFromFirstTM() {
someClass.underlyingMethod()
}
@Transactional("transactionManager2")
public void transactionFromSecondTM() {
someClass.underlyingMethod()
}
好吧我用它来从实际的事务管理器中获取hibernate Session:
protected Session getSession() {
Map<Object, Object> resourceMap = TransactionSynchronizationManager.getResourceMap();
Session session = null;
for (Object value : resourceMap.values()) {
if (value instanceof SessionHolder) {
session = ((SessionHolder) value).getSession();
break;
}
}
return session;
}
答案 0 :(得分:2)
我认为你不能,但你不应该对事务管理器做任何事情。 TransactionSynchronizationManager
另一个有用的类是TransactionAspectUtils
。但并不是说两者都是在内部使用的,你不应该在代码中的许多地方依赖它们。