springboot 整合 druid 数据库连接池
在 pom 文件中添加依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
在application.yaml文件中配置
以下配置文件中,除了基本的配置以外还配置了:
防止sql注入、sql监控、启用内置监控页面、开启慢SQL统计
内置监控页面开启之后的地址为:项目地址后面加 druid
spring:
datasource:
name: druidDataSource
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://127.0.0.1:3306/edu
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
initial-size: 1 # 初始化链接数
min-idle: 1 # 最小保留连接数
max-active: 30 # 最大连接数
max-wait: 60000 # 超时时间
time-between-eviction-runs-millis: 60000 # 空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔
min-evictable-idle-time-millis: 300000 # 指定一个空闲连接最少空闲多久后可被清除
validation-query: SELECT 1 # 链接断开检查语句
test-while-idle: true # 超时检测
test-on-borrow: false # 即在获取Connection对象时检测其可用性
test-on-return=: false # 设置当连接被归还时,是否要提交所有还未完成的事务
pool-prepared-statements: true # 打开PSCache,并且指定每个连接上PSCache的大小
max-pool-prepared-statement-per-connection-size: 20
# 过滤器设置(第一个stat很重要,没有的话会监控不到SQL)
filters: stat,wall,log4j2
# 'wall'用于防火墙 防止sql注入
# 启用StatFilter
web-stat-filter:
enabled: true
url-pattern: /* # 添加过滤规则
exclusions: /druid/* # 排除一些不必要的url
session-stat-enable: true # 开启session统计功能
session-stat-max-count: 1000 # 缺省sessionStatMaxCount是1000个
#spring.datasource.druid.web-stat-filter.principal-session-name=
#spring.datasource.druid.web-stat-filter.principal-cookie-name=
#spring.datasource.druid.web-stat-filter.profile-enable=
##### StatViewServlet配置 #######
#启用内置的监控页面
stat-view-servlet:
enabled: true
url-pattern: /druid/* #内置监控页面的地址
reset-enable: false #关闭 Reset All 功能
login-username: admin #设置登录用户名
login-password: 123 #设置登录密码
allow: 127.0.0.1 #白名单(如果allow没有配置或者为空,则允许所有访问)
deny: #黑名单(deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝)
# 开启慢SQL统计(这里超过500毫秒则判定为慢SQL)
filter:
stat:
enabled: true
log-slow-sql: true
slow-sql-millis: 500
以上的参数都是作者根据自身编写的,最终的优化还是要根据自己的实际情况配置。
druid 中使用ConfigFilter对配置文件进行操作
ConfigFilter的作用:
- 从配置文件中读取配置
- 从远程http文件中读取配置
- 为数据库密码提供加密功能
数据库密码加密
在命令行中执行如下命令:
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password
输出
privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==
在 application.properties 中配置以下选项
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
# 生成的加密后的密码(原密码 123456)
spring.datasource.password=WVMjPhfXQrIsWRo0/RCqAVvYtTU9WNVToKJohb8AlUmHwnV6vwFL+FM2CNFDMJwGHW1iCmyaUlF+sgvFdogqEA==
# 生成的公钥
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIiwHpFrDijV+GzwRTzWJk8D3j3jFfhsMFJ/7k1NTvBuLgL+TdIHgaMNOIEjHpXzuvX38J3FtOK8hLrySncVGOMCAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
# 启用ConfigFilter
spring.datasource.druid.filter.config.enabled=true