最初我对多个数据源使用不同的事务管理器。但是,如果其中一个数据源发生事务失败,我在管理所有数据源的回滚时遇到问题。我想在 Spring 中使用单个事务管理器管理多个数据源。所以我选择使用 JOTM 或 Atomikos。这两个事务管理器都使用XA Connection pool(org.enhydra.jdbc.pool.StandardXAPoolDataSource)。但是在我的项目中,我只被允许使用DBCP 2(org.apache.commons.dbcp.BasicDataSource) 或 Tomcat Connection Pool(org.apache.tomcat.jdbc.pool.DataSource)。是否可以将任何一个连接池与 JOTM 或 Atomikos 一起使用。请有人帮助我以及配置示例。下面是我的配置细节,
<
bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
</bean>
<bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource">
<bean class ="org.enhydra.jdbc.standard.StandardXADataSource " destroy-method ="shutdown">
<property name="transactionManager" ref="jotm" />
<property name="driverName" value="${jdbc.d1.driver}" />
<property name ="url" value = "${jdbc.d1.url}" />
</bean>
</property>
<property name="user" value="${jdbc.d1.username}" />
<property name = "password" value="${jdbc.d1.password}" />
</bean>
<bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource">
<bean class ="org. enhydra.jdbc.standard.StandardXADataSource " destroy-method ="shutdown">
<property name="transactionManager" ref="jotm" />
<property name="driverName" value="${jdbc.d2.driver}" />
<property name="url" value="${jdbc.d2.url}" />
</bean>
</property>
<property name="user" value="${jdbc.d2.username}" />
<property name = "password" value ="${jdbc.d2.password}" />
</bean>
如果有任何其他可能的方法来实现这一点,也可以提供帮助。