2017-04-19 3 views
0

Je dois annuler la première instruction si une erreur survient lors de l'exécution de la deuxième instruction de mise à jour dans une base de données différente. Je ne veux pas utiliser EntityManager car JdbcTemplate est déjà utilisé dans tous les autres codes. Si j'utilise @Transactional avec le qualificateur, cela fonctionne parfaitement, mais je veux que @Transactional fonctionne pour les deux bases de données.Comment puis-je utiliser une transaction unique avec plusieurs sources de données avec jdbcTemplate au démarrage de printemps?

Mon extrait de code est le suivant:

**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"); 
} 

Répondre

0

Vous avez besoin d'un gestionnaire de transaction globale. Vous pouvez utiliser JtaTransactionManager

Spring Voici tutoriel qui le montre:

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

+0

Ce poste n'explique comment puis-je configurer plusieurs de source de données et multiples de JdbcTemplate correctement. Si vous avez un autre lien avec un exemple complet, cela m'aidera beaucoup. Merci.. –