druid starter
Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池和监控。
Druid 是数据库连接池和监控工具,可以用在任何Java项目中. Druid Spring Boot Starter 是面向 Spring Boot 定制的一个为了减少配置的启动器。如果不是在Spring Boot项目中,可以直接使用Druid (opens new window)。
# 依赖引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 配置
# JDBC配置
# 数据库连接url
spring.datasource.url=
# 数据库连接用户名
spring.datasource.username=
# 数据库连接密码
spring.datasource.password=
# OR
spring.datasource.druid.url=
spring.datasource.druid.username=
spring.datasource.druid.password=
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
如果不使用 Druid 的配置,还需要一条额外的配置如下:
# 数据库连接驱动
spring.datasource.driver-class-name=
# OR
spring.datasource.druid.driver-class-name=
1
2
3
4
2
3
4
加入 Druid 依赖后可以不指定 driver-class-name,Druid 会根据url自动查找驱动类。如url=jdbc:postgresql://对应 org.postgresql.Driver。 JDBC配置完后,如果不需要额外配置连接池参数、监控,可以直接使用Druid。
# 连接池配置
# 初始化连接数
spring.datasource.druid.initial-size=
# 最大连接数, maxPoolSize
spring.datasource.druid.max-active=
# 最小空闲连接数, minPoolSize
spring.datasource.druid.min-idle=
# 最大等待时间
spring.datasource.druid.max-wait=
# 是否缓存preparedStatement,默认为false
spring.datasource.druid.pool-prepared-statements=
# 每个连接池的最大缓存Statement数量
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=
# 每个连接池的最大缓存Statement数量
spring.datasource.druid.max-open-prepared-statements= #和上面的等价
# 检测连接是否有效的sql,默认为select 1
spring.datasource.druid.validation-query=
# 检测连接是否有效的sql执行超时,默认为3秒
spring.datasource.druid.validation-query-timeout=
# validation-query配置时生效,获取连接时执行 validation-query, 默认为 false, 建议设置成false.
spring.datasource.druid.test-on-borrow=
# validation-query配置时生效,归还连接时候执行 validation-query, 默认为 false, 建议设置成false.
spring.datasource.druid.test-on-return=
# validation-query配置时生效,定期检查,如果连接空闲时间大于 timeBetweenEvictionRunsMillis,则执行 validation-query, 建议设置成true.
spring.datasource.druid.test-while-idle=
# 配置多久才需要进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=
# 配置一个连接在连接池中的最小生存时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=
# 配置一个链接在连接池中的最大生存时间,单位是毫秒
spring.datasource.druid.max-evictable-idle-time-millis=
spring.datasource.druid.filters= #配置多个英文逗号分隔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 监控配置
# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled= #是否启用StatFilter默认值false
# StatFilter的url-pattern,默认为/druid/*
spring.datasource.druid.web-stat-filter.url-pattern=
# StatFilter的exclusions,默认为*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
spring.datasource.druid.web-stat-filter.exclusions=
# 是否打开 session 统计,默认为 false
spring.datasource.druid.web-stat-filter.session-stat-enable=
# 设置 session 统计的最大值,默认是 1000
spring.datasource.druid.web-stat-filter.session-stat-max-count=
# 让druid感知用户信息,值是session中保存的sessionName,如果配置为a,会去session中找键为a的值
spring.datasource.druid.web-stat-filter.principal-session-name=
# 让druid感知用户信息,值是cookie中保存的cookieName,如果配置为a,会去cookie中找键为a的值
spring.datasource.druid.web-stat-filter.principal-cookie-name=
# 是否开启单个监控url调用的sql列表 默认开启
spring.datasource.druid.web-stat-filter.profile-enable=
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled= #是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
# StatViewServlet的url-pattern,默认为/druid/*
spring.datasource.druid.stat-view-servlet.url-pattern=
# 是否允许重置统计数据,默认为false
spring.datasource.druid.stat-view-servlet.reset-enable=
# web登录用户名
spring.datasource.druid.stat-view-servlet.login-username=
# web登录密码
spring.datasource.druid.stat-view-servlet.login-password=
# 白名单,多个ip以逗号分隔,如
spring.datasource.druid.stat-view-servlet.allow=
# 黑名单,多个ip以逗号分隔,如
spring.datasource.druid.stat-view-servlet.deny=
# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
开启监控的web页面功能需要配置WebStatFilter 和 StatViewServlet。前者用于监控数据的采集,后者用于监控数据的展示。
# 拿来就用的配置
copy from ruoyi
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 去广告
广告地址来自于 commom.js, 拦截该文件清空内容。
@Configuration
public class DruidSqlConfiguration {
@Bean
@ConditionalOnProperty(name = {"spring.datasource.druid.stat-view-servlet.enabled"},havingValue = "true")
public FilterRegistrationBean removeADFilterRegistrationBean(DruidStatProperties druidStatProperties) {
//获取Web监控页面的参数
DruidStatProperties.StatViewServlet statViewServlet = druidStatProperties.getStatViewServlet();
//提取common.js的配置路径
String urlPattern = statViewServlet.getUrlPattern() != null? statViewServlet.getUrlPattern():"/druid/*";
String commonJsPattern = urlPattern.replaceAll("\\*","js/common.js");
//定义过滤器
Filter filter = new javax.servlet.Filter() {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, javax.servlet.FilterChain filterChain) throws IOException, ServletException {
String content = Utils.readFromResource("support/http/resources/js/common.js");
content = content.replace("this.buildFooter();","");
servletResponse.getWriter().write(content);
}
};
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns(commonJsPattern);
return registrationBean;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26