Multiple DataSource and JdbcTemplate in Spring Boot (> 1.1.0)
40,083
Solution 1
Try to move @Qualifier
annotation to the parameter
on your @Bean
methods for JdbcTemplate
.
I guess, when you remove @Primary
you end up with error, where more than one appropriate beans are presented
Solution 2
It should looks like this:
@Bean(name = "jdbcSlave")
@Autowired
public JdbcTemplate slaveJdbcTemplate(@Qualifier("dsSlave") DataSource dsSlave) {
return new JdbcTemplate(dsSlave);
}
Author by
Xavier
Updated on September 28, 2020Comments
-
Xavier over 3 years
I would like to inject a specific
JdbcTemplate
in a Spring Boot project. I tried to follow this example for multipleDataSource
configuration : http://spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-nowMy code does compile and run, but only the DataSource with the
@Primary
annotation is taken into account, no matter what I put as@Qualifier
in theSqlService
class. My relevant code is the following :DatabaseConfig.java
:@Configuration public class DatabaseConfig { @Bean(name = "dsSlave") @ConfigurationProperties(prefix="spring.mysql_slave") public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "dsMaster") @Primary @ConfigurationProperties(prefix="spring.mysql_master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "jdbcSlave") @Autowired @Qualifier("dsSlave") public JdbcTemplate slaveJdbcTemplate(DataSource dsSlave) { return new JdbcTemplate(dsSlave); } @Bean(name = "jdbcMaster") @Autowired @Qualifier("dsMaster") public JdbcTemplate masterJdbcTemplate(DataSource dsMaster) { return new JdbcTemplate(dsMaster); } }
And I did a quick service to try it out :
SqlService.java
:@Component public class SqlService { @Autowired @Qualifier("jdbcSlave") private JdbcTemplate jdbcTemplate; public String getHelloMessage() { String host = jdbcTemplate.queryForObject("select @@hostname;", String.class); System.out.println(host); return "Hello"; } }
-
nanospeck almost 8 yearsIt works great. Can you share the link where this technique is mentioned in the official documentation. Just to know where I should have looked. Tks.
-
Prakash P over 6 yearsCommunicating with two different data sources using
JPA
is somewhat complicated as shown inhttps://github.com/spring-projects/spring-data-examples/tree/master/jpa/multiple-datasources
. Can we use the above process of creating two different instances ofMysqlTemplate
to communicated using JPA with tables of different databases?