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