I would like to inject a specific JdbcTemplatein a Spring Boot project. I tried to follow this example for multiple DataSourceconfiguration : 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 @Primaryannotation is taken into account, no matter what I put as @Qualifier in the SqlServiceclass. 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