Spring事务多个数据源

时间:2011-08-25 19:43:12

标签: spring

我有两个数据源用于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>    

2 个答案:

答案 0 :(得分:5)

您需要支持适当的JavaEE容器,支持两阶段提交和XA事务。 Oracle和Postgres JDBC驱动程序都支持XA事务,所以没关系。

容器通过JTA API将此公开给Spring,Spring使用JtaTransactionManager来使用它。您的应用程序不必更改,它只是将其视为正常事务。

如何进行此设置完全取决于您的JavaEE容器,每个容器都采用不同的方式。

答案 1 :(得分:0)

你的意思是two-phase commit吗?这是一个棘手的问题,取决于您使用的数据库和驱动程序。