2017-04-19 28 views
0

別のデータベースで2番目の更新ステートメントを実行中にエラーがある場合、最初のステートメントをロールバックする必要があります。 他のすべてのコードですでにJdbcTemplateが使用されているため、EntityManagerを使用したくありません。 @Transactionalを修飾子で使用すると、完全に動作しますが、@Transactionalを両方のデータベースで動作させる必要があります。次のようにspringブートでjdbcTemplateを使用して複数のデータソースで単一トランザクションを使用するにはどうすればよいですか?

私のコードスニペットは、次のとおりです。

**DatasourceConfig.xml** 
//Datasource for **DB2** database 
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 
    <constructor-arg ref="hikariConfigLmsDataSource" /> 
</bean> 

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
    scope="singleton" primary="true"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

//Datasource for **Mysql** Database database 
<bean id="dataSource1" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 
    <constructor-arg ref="hikariConfigLmsDataSource1" /> 
</bean> 

<bean id="jdbcTemplate1" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource1"/> 
</bean> 

<bean id="transactionManager1" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
    scope="singleton" primary="true"> 
    <property name="dataSource" ref="dataSource1" /> 
</bean> 


//Inside service class 
**MyService.java** 

@Autowired("jdbcTemplate") 
JdbcTemplate jdbcTemplate; 

@Autowired("jdbcTemplate1") 
JdbcTemplate jdbcTemplate1; 

@Transactional 
public void modifyDB() 
{ 
    jdbcTemplate.update("Update query for table in DB2 database"); 
    jdbcTemplate1.update("Update query for table in MySql database"); 
} 

答えて

0

あなたはグローバルトランザクションマネージャを必要とします。私は、複数のデータソースのと複数のjdbctemplateの適切に設定する方法を説明していないポスト

http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/

+0

:あなたはここでそれを示したチュートリアルがあるSpringのJtaTransactionManager

を使用することができます。あなたが完全な例と他のリンクを持っている場合私は多くの助けになります。ありがとう.. –

関連する問題