Spring Boot中的多个DataSource和JdbcTemplate(> 1.1.0)

我想在Spring Boot项目中注入一个特定的JdbcTemplate 。 我尝试按照此示例进行多个DataSource配置: http : //spring.io/blog/2014/05/27/spring-boot-1-1-0-m2-available-now

我的代码编译并运行,但只考虑带有@Primary注释的DataSource,无论我在SqlService类中放置什么@Qualifier 。 我的相关代码如下:

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

我做了一个快速的服务尝试:

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

尝试将@Qualifier注释移动到JdbcTemplate@Bean方法的parameter

我想,当你删除@Primary你最终会出现错误,其中会出现more than one appropriate beans are presented

它应该是这样的:

 @Bean(name = "jdbcSlave") @Autowired public JdbcTemplate slaveJdbcTemplate(@Qualifier("dsSlave") DataSource dsSlave) { return new JdbcTemplate(dsSlave); }