I would like to inject a specific JdbcTemplate
in a Spring Boot project. I tried to follow this example for multiple DataSource
configuration : http://spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-now
My 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 the SqlService
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"; } }
It should looks like this:
@Bean(name = "jdbcSlave") @Autowired public JdbcTemplate slaveJdbcTemplate(@Qualifier("dsSlave") DataSource dsSlave) { return new JdbcTemplate(dsSlave); }
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With