我有两个数据源用于oracle,另一个用于postgresql,两者都用于相同的业务方法。我怎样才能使用spring @transaction
进行事务处理业务方法
@Transactional
public int getData(){
oracleDao.func1();
postgreDao.func2();
}
在配置中我有
<bean id="transactionManagerPostGres" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="transactionManagerOracle" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactoryOracle"/>
</bean>
答案 0 :(得分:5)
您需要支持适当的JavaEE容器,支持两阶段提交和XA事务。 Oracle和Postgres JDBC驱动程序都支持XA事务,所以没关系。
容器通过JTA API将此公开给Spring,Spring使用JtaTransactionManager
来使用它。您的应用程序不必更改,它只是将其视为正常事务。
如何进行此设置完全取决于您的JavaEE容器,每个容器都采用不同的方式。
答案 1 :(得分:0)
你的意思是two-phase commit吗?这是一个棘手的问题,取决于您使用的数据库和驱动程序。