这篇可以说是上篇的后续
Druid数据源是阿里巴巴研发的,有些人喜欢叫做德鲁伊数据源,阿里毕竟用该数据源应付了多年双十一的冲击,该数据源还是经受了很大的考验,所以了解他很有必要!
首先pom.xml中添加依赖:注意别用太高的版本!
<!--引入druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
然后在配置文件中,声明开启该数据源!就是下面的
type : com.alibaba.druid.pool.DruidDataSource这条语句,其实我发现这步可以跳过,为什么呢,我试过了,只要增加了druid依赖,Springboot就会默认使用它,不配置下面的type属性也行
spring:
datasource:
username: root
password: 123
url: jdbc:mysql://192.168.31.52:3306/jdbc
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
server:
port: 8888
至此,springboot的数据源就启用的是druid:
如果想设置数据源的参数,以及开启Druid监听功能,则需要采用下面的方法!
方法一:参考了b站尚硅谷视频的方法
1.在配置文件yml中声明一些属性
spring:
datasource:
username: root
password: 123
url: jdbc:mysql://192.168.31.52:3306/jdbc
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
initialization-mode: always
2.很显然的是!!initialSize这些属性并不在spring.datasource下,所以想要这些属性生效就得将下面的bean注入到ioc容器中:
//让数据源其他配置生效
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
3.如果想实现监听功能,则将下面两个bean也注入进去:
//1.配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String,String> map = new HashMap<>();
map.put("loginUsername","admin");
map.put("loginPassword","123456");
map.put("allow","");//默认就是运行所有访问
map.put("deny","192.168.31.53");
bean.setInitParameters(map);
return bean;
}
//2.配置一个监控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean();
filterFilterRegistrationBean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
filterFilterRegistrationBean.setInitParameters(initParams);
filterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
return filterFilterRegistrationBean;
}
方法二、上面的配置比较繁琐是吧,那就看看怎么简化:
全部配置直接写在yml中!!这次用主机localhost为例子
spring:
datasource:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/mp?serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialization-mode: always
druid:
# 连接池配置
# 配置初始化大小、最小、最大
initial-size: 1
min-idle: 1
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 3000
validation-query: SELECT 1 FROM DUAL
test-on-borrow: false
test-on-return: false
test-while-idle: true
pool-prepared-statements: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
filters: stat,wall,slf4j
# 配置web监控,默认配置也和下面相同(除用户名密码,enabled默认false外),其他可以不配
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: root
allow: 127.0.0.1
OK!配置说完了,现在解释一下上面druid监听的作用:
运行springboot的主类
访问/druid/login.html 该页面是druid数据源自带的,输入上面自己设置好的用户名和密码,即可观察程序的很多细节参数,极大程度的方便了程序员进行性能调优和压力测试!
特别说明!其实对于方法一来说,不引入druid-spring-boot-starter这个启动器依赖,而是引入下面的依赖也照样可以成立:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>