Spring - 使用TransactionManager

时间:2011-05-04 11:33:11

标签: java spring transactions

我有两个交易经理,如果有可能获得已经使用的那个,我很好奇。

更具体地说,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;
}

1 个答案:

答案 0 :(得分:2)

我认为你不能,但你不应该对事务管理器做任何事情。 TransactionSynchronizationManager

中提供了有关当前交易的一些操作

另一个有用的类是TransactionAspectUtils。但并不是说两者都是在内部使用的,你不应该在代码中的许多地方依赖它们。