1.导入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
2.application.yml配置多数据源连接信息
spring:
datasource:
one:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/jdbc
username: root
password: root
two:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/jdbc2
username: root
password: root
druid:
max-wait: 60000
#在每次连接的时候判断一些连接是否有效
test-on-borrow: true
test-while-idle: true
3.配置多个数据源实例Bean
由于我们配置了多数据源,springboot提供的自动化配置也就失效,需要我们手动配置。
@Configuration
public class DataSourceConfig {
@ConfigurationProperties(prefix = "spring.datasource.one")
@Bean(name = "dsOne")
public DataSource dsOne(){
return DruidDataSourceBuilder.create().build();
}
@ConfigurationProperties(prefix = "spring.datasource.two")
@Bean(name = "dsTwo")
public DataSource dsTwo(){
return DruidDataSourceBuilder.create().build();
}
}
注:@Qualifier :告诉是使用哪个数据源
@ConfigurationProperties :加载application.properties中的哪个数据源
@Primary:自动装配时若出现多个Bean候选者时,被该注解修饰的bean将被作为首选者,否则会被抛出异常
4.配置多个JdbcTemplate实例Bean
@Configuration
public class JdbcTemplateConfig {
@Bean
public JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean
public JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
5.简单测试
@RestController
public class JdbcDsController {
@Resource(name = "jdbcTemplateOne")
private JdbcTemplate jdbcTemplateOne;
@Autowired
@Qualifier("jdbcTemplateTwo")
private JdbcTemplate jdbcTemplateTwo;
@GetMapping("/test1")
public void test1(){
List<Book> books1 = jdbcTemplateOne.query("select * from t_book", new BeanPropertyRowMapper<>(Book.class));
List<Book> books2 = jdbcTemplateTwo.query("select * from t_book", new BeanPropertyRowMapper<>(Book.class));
System.out.println(books1);
System.out.println(books2);
}
}
参考: