一、配置数据源application.yml
spring:
datasource:
one:
username: root
password: root123
jdbc-url: jdbc:oracle:thin:@//localhost:1521/orcl
driver-class-name: oracle.jdbc.driver.OracleDriver
two:
username: root
password: root123
jdbc-url: jdbc:oracle:thin:@//localhost:1521/orcl_test
driver-class-name: oracle.jdbc.driver.OracleDriver
注意: 多数据源的时候,url字段需要写成 jdbc-url
二、配置DataSourceConfig 和 JdbcTemplateConfig
因为使用了两种数据源并区分命名,所以SpringBoot无法自动加载,需要手动去配置加载DataSource,创建DataSourceConfig类:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource dsOne(){
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource dsTwo(){
return DataSourceBuilder.create().build();
}
}
配置之后,我们就有了两个不同的DataSource,再用这两个不同的DataSource去创建两个不同的JdbcTemplate。
创建JdbcTemplateConfig类,用来提供两个不同的JdbcTemplate实例:
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dsOne) {
return new JdbcTemplate(dsOne);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dsTow) {
return new JdbcTemplate(dsTow);
}
}
每一个JdbcTemplate的创建都需要一个DataSource,由于Spring容器中现在存在两个DataSource,加上@Qualifier注解,表示按照名称查找。这里创建了两个JdbcTemplate实例,分别对应了两个DataSource,然后就可以直接使用JdbcTemplate
三、测试使用
在@RestController中注入两个不同的JdbcTemplate,这两个JdbcTemplate分别对应了不同的数据源:
@RestController
public class helloworld {
@Autowired
@Qualifier("jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne;
@Resource(name = "jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo;
@RequestMapping("/one")
public List<Map<String,Object>> userList(){
String sql = "select * from book";
List<Map<String,Object>> list_maps = jdbcTemplateOne.queryForList(sql);
return list_maps;
}
@RequestMapping("/two")
public List<Map<String,Object>> userLista(){
String sql = "select * from book";
List<Map<String,Object>> list_maps = jdbcTemplateTwo.queryForList(sql);
return list_maps;
}
}
和DataSource一样,Spring容器中的JdbcTemplate也是有两个,因此不能通过byType的方式注入进来,这里给大伙提供了两种注入思路,一种是使用@Resource注解,直接通过byName的方式注入进来,另外一种就是 @Autowired 注解加上 @Qualifier 注解,两者联合起来,实际上也是byName。将JdbcTemplate注入进来之后,jdbcTemplateOne和jdbcTemplateTwo此时就代表操作不同的数据源,使用不同的JdbcTemplate操作不同的数据源,实现了多数据源配置。