配置数据源
1、添加Druid依赖
<!-- druid数据源-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
2、配置Druid
spring:
datasource:
username: root
password: root
## 数据库驱动类
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/security?serverTimezone=UTC
## 切换自定义数据源
type: com.alibaba.druid.pool.DruidDataSource
## 数据源其他配置
#初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initialSize: 5
# 已经不再使用,配置了也没效果
minIdle: 5
# 最大连接池数量
maxActive: 20
# 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
maxWait: 60000
# 有两个含义:
# 1) Destroy线程会检测连接的间隔时间
# 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
timeBetweenEvictionRunsMillis: 60000
# 连接保持空闲而不被驱逐的最长时间
minEvictableIdleTimeMillis: 300000
# 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
validationQuery: SELECT 1 FROM DUAL
# 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testWhileIdle: true
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnBorrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testOnReturn: false
# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
poolPreparedStatements: true
## 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
# 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
# 监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
filters: stat,wall,log4j
#
maxPoolPreparedStatementPerConnectionSize: 20
#
useGlobalDataSourceStat: true
#
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3、测试Druid数据源是否切换成功
@SpringBootTest
class SpringBootDataJdbcApplicationTests {
@Autowired
DataSource dataSource;
@Test
void connection() throws SQLException {
// 打印数据源:com.alibaba.druid.pool.DruidDataSource
System.out.println(dataSource.getClass());
// 获取连接对象
Connection connection = dataSource.getConnection();
// 打印连接对象:com.mysql.cj.jdbc.ConnectionImpl@715b886f
System.out.println(connection);
// 关闭连接
connection.close();
}
}
4、Druid数据源切换成功
配置Druid数据源监控系统
@Configuration
public class DruidConfig {
/**
* 将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
* 绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
* @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
* 前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
*
* @return DruidDataSource
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druid(){
return new DruidDataSource();
}
// 配置druid监控
// 1、配置一个管理后台的 StatViewServlet
// 以下属性可以在com.alibaba.druid.support.http.StatViewServlet或
// com.alibaba.druid.support.http.ResourceServlet中找到
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");
Map<String,String> initParams = new HashMap<>();
// 后台管理登录账户
initParams.put("loginUsername","admin");
// 后台管理登录密码
initParams.put("loginPassword","123456");
// 允许哪个IP访问,为""或null表示允许所有访问
initParams.put("allow","");
// 拒绝哪个IP地址访问
initParams.put("deny","192.168.43.93");
// 设置初始化参数
bean.setInitParameters(initParams);
return bean;
}
// 2、配置一个web监控的 WebStatFilter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
//exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
initParams.put("exclusions","*.js,*.css,*.img,/druid/*");
// 设置初始化参数
bean.setInitParameters(initParams);
// "/*" 表示过滤所有请求
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}