推荐使用springboot标识的依赖
com.alibaba
druid-spring-boot-starter
1.1.10
eg:常用网址:https://mvnrepository.com/
yml配置后即可使用:
spring:
datasource:
# jdbc配置
url:
username:
password:
driver-class-name:
type: com.alibaba.druid.pool.DruidDataSource
yml配置:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url:
username:
password:
driver-class-name:
# 下面的连接池属性不会自动装配,使用下面的属性需要在配置类中配置数据源
initialSize: 50 #初始化时建立连接的个数
minIdle: 50 #最小连接池数量
maxActive: 200 #最大连接池数量
maxWait: 60000 #获取连接的最大等待时间,毫秒
timeBetweenEvictionRunsMillis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,毫秒
minEvictableIdleTimeMillis: 300000 #配置一个连接在池中最小生存的时间,毫秒
maxEvictableIdleTimeMillis: 900000 #配置一个连接在池中最大生存的时间,毫秒
validationQuery: SELECT 1 FROM DUAL #用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果 validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
testWhileIdle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
testOnBorrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
poolPreparedStatements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
配置类代码:
@Configuration
public class DBConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
}
配置类中增加配置:
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//登录druid后台监控的账号密码
servletRegistrationBean.addInitParameter("loginUsername", "root");
servletRegistrationBean.addInitParameter("loginPassword", "root");
//是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
//拦截的路径
filterRegistrationBean.addUrlPatterns("/*");
//不需要拦截的信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
通过:项目地址/druid来进行访问,用户名密码为配置类中配置的密码,例如上面的root/root
在配置类中增加配置:
public Filter statFilter(){
StatFilter statFilter=new StatFilter();
statFilter.setSlowSqlMillis(1000);// 执行超过此时间的为慢sql,毫秒
statFilter.setLogSlowSql(true);// 是否打印慢日志
statFilter.setMergeSql(true);// 是否将日志合并起来
return statFilter;
}
数据源配置中修改为:
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
druidDataSource.setProxyFilters(Lists.newArrayList(statFilter()));
return druidDataSource;
}
注:
1)springboot不同版本间yml配置文件中属性名会有所不同,理解->发挥
2)minEvictableIdleTimeMillis、maxEvictableIdleTimeMillis赋值时的bug,
官方文档:
https://github.com/alibaba/druid/issues/1796
https://github.com/lihengming/druid/commit/ca13e8ff5a78c83f953fa8fb320c56be223219e1
3)关于druid的sql监控和慢sql记录,本文的自测可用,也在网上找了很多,网上很多总结的是在配置文件中配置,如下:
statViewServlet:
enabled: true
url-pattern: /monitor/druid/*
filter:
stat:
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
4)官方学习地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter