说我有这个设置:
MyDAO1.java:
public class MyDAO1 {
@Resource(name="myLibraryDAO")
private MyLibraryDAO myLibraryDAO;
@Transactional(value="myTransactionManager")
public void foo() {
myLibraryDAO.bar();
}
}
MyLibraryDAO.java
public class MyLibraryDAO {
@Resource(name="myUtilityDAO")
private MyUtilityDAO myUtilityDAO;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void bar() {
myUtilityDAO.baz();
}
}
在我的spring上下文文件中,我没有在我的tx:annotation-driven指令中指定任何默认的事务管理器(主要是因为我有其他数据源及其事务管理器,我不想将其声明为默认)。 MyDAO1和MyLibraryDAO对可能不同的数据源进行操作(我不打算进行任何XA样式的管理),并且要求MyLibraryDAO不对现有事务(如果存在)进行操作。为了解决这个问题,我使用了propagation = REQUIRES_NEW。
现在,当我使用@Transactional(propagation = REQUIRES_NEW)时,我想知道是否有一种方法可以让它重用外部事务的事务管理器的属性(如果可用) ?由于MyLibraryDAO旨在成为一个库,因此没有任何特定的使用相关信息,在运行时配置它的最佳方法是什么(基于调用DAO)?
现在,在查找名为" transactionManager"的默认事务管理器bean时,它显然失败了。
我知道我可能听起来很困惑,但如果有人提出更尖锐的问题,我会很感激。
谢谢!