1.application.properties配置文件
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
#----DS1----
spring.datasource.primary.url=jdbc:sqlserver://127.0.0.1:1433;databasename=test1
spring.datasource.primary.username=sa
spring.datasource.primary.password=123456
#----DS2---
spring.datasource.secondary.url=jdbc:sqlserver://127.0.0.1:1433;databasename=test2
spring.datasource.secondary.username=sa
spring.datasource.secondary.password=123456
#DS3
spring.datasource.third.url=jdbc:sqlserver://127.0.0.1:1433;databasename=test3
spring.datasource.third.username=sa
spring.datasource.third.password=123456
#---------------------------------------------------------------------------------------
spring.datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.secondary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.third.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.druid.initial-size = 5
spring.datasource.druid.max-active = 20
spring.datasource.druid.min-idle = 5
spring.datasource.druid.max-wait= 30000
以上为最基本配置。
注:druid如果不配置Filter,默认是开启的,譬如web-stat-filter、stat-view-servlet等,可以通过配置属性覆盖默认配置,例如:
# WebStatFilter monitor
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern= \*
spring.datasource.druid.web-stat-filter.exclusions= *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.session-stat-enable= false
spring.datasource.druid.web-stat-filter.session-stat-max-count= 1000
#\u76D1\u63A7\u5355\u4E2Aurl\u8C03\u7528\u7684sql\u5217\u8868
spring.datasource.druid.web-stat-filter.profile-enable=true
# StatViewServlet ,it configs who can visit
spring.datasource.druid.stat-view-servlet.enabled= true
spring.datasource.druid.stat-view-servlet.url-pattern= /druid/*
spring.datasource.druid.stat-view-servlet.reset-enable= true
spring.datasource.druid.stat-view-servlet.login-username= admin
spring.datasource.druid.stat-view-servlet.login-password= admin123
spring.datasource.druid.stat-view-servlet.allow= 127.0.0.1
如果设置了StatViewServlet,即配置了监控池认证,要进监控池需要输入http://127.0.0.1:8083/druid/login.html,如果没配置,直接输入http://127.0.0.1:8083/druid/即可
package cn.do1shoje.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
/**
* 多数据源,集成druid
* @author shoje
*
*/
@Configuration
public class DSConfig {
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource(){
return DruidDataSourceBuilder.create().build();
//return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource(){
return DruidDataSourceBuilder.create().build();
//return DataSourceBuilder.create().build();
}
@Bean(name = "thirdDataSource")
@Qualifier("thirdDataSource")
@ConfigurationProperties(prefix = "spring.datasource.third")
public DataSource thirdDataSource(){
return DruidDataSourceBuilder.create().build();
//return DataSourceBuilder.create().build();
}
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean(name = "thirdJdbcTemplate")
public JdbcTemplate thirdJdbcTemplate(@Qualifier("thirdDataSource")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
这里我使用时遇到一个问题,就是构建DataSource时,一直用的JDBC的DataSourceBuilder在构建数据源,然后发觉怎么查看日志都发现Druid没有生效,一开始我是没有发觉的,因为用
DBC的DataSourceBuilder在构建数据源,程序是正常的,调用数据库也是正常的,只是druid未生效而已,直到我查看druid的监控池后,才发现这个druid未生效,为什么呢?因为druid监控池中的几个指标全是空的,连数据源那个指标都是空的,当即判断,druid未生效。改用DruidDataSourceBuilder构建数据源即解决springboot整合多数据源和Druid的问题。
数据源配置完了,则是使用问题。
@RestController
@RequestMapping("/api/v1")
public class InfoController {
private Logger log = LoggerFactory.getLogger(InfoController.class);
private static final String DEFAULT_PAGE_START = "0";
private static final String DEFAULT_PAGE_SIZE = "10";
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate jt;
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate jt2;}
在需要使用的地方直接注入,即可。