阿里的开源Druid,GitHub上有相关介绍,连接地址以下:html
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
复制代码
compile 'com.alibaba:druid-spring-boot-starter:1.1.10'
复制代码
application.yml中druid配置属性以下:(application.properties中配置相似)java
spring:
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 初始化物理链接个数
initial-size: 1
# 最大链接池数量
max-active: 20
# 最小链接池数量
min-idle: 5
# 获取链接时最大等待时间(ms)
max-wait: 60000
# 开启缓存preparedStatement(PSCache)
pool-prepared-statements: true
# 启用PSCache后,指定每一个链接上PSCache的大小
max-pool-prepared-statement-per-connection-size: 20
# 用来检测链接是否有效的sql
validation-query: select 'x'
# 申请链接时不检测链接是否有效
test-on-borrow: false
# 归还链接时不检测链接是否有效
test-on-return: false
# 申请链接时检测,若是空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测链接是否有效(不影响性能)
test-while-idle: true
# 检测链接的间隔时间,若链接空闲时间 >= minEvictableIdleTimeMillis,则关闭物理链接
time-between-eviction-runs-millis: 60000
# 链接保持空闲而不被驱逐的最小时间(ms)
min-evictable-idle-time-millis: 300000
# 配置监控统计拦截的filters(不配置则监控界面sql没法统计),监控统计filter:stat,日志filter:log4j,防护sql注入filter:wall
filters: stat,log4j,wall
# 支持合并多个DruidDataSource的监控数据
use-global-data-source-stat: true
# 经过connectProperties属性来打开mergeSql(Sql合并)功能;慢SQL记录(配置超过5秒就是慢,默认是3秒)
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
复制代码
各个配置属性说明在阿里的Druid GitHub上有介绍,地址:github.com/alibaba/dru…mysql
各个配置属性参考值,地址: github.com/alibaba/dru…git
SQL合并,慢SQL记录,多个DruidDataSource的监控数据合并配置,地址:github.com/alibaba/dru…github
关于一些配置的说明:spring
可能有人对PSCache这两项配置存在疑问?sql
# 开启缓存preparedStatement(PSCache)
pool-prepared-statements: true
# 启用PSCache后,指定每一个链接上PSCache的大小
max-pool-prepared-statement-per-connection-size: 20
复制代码
Druid官方建议对于MySQL数据库,关闭preparedStatement缓存(即PSCache),即pool-prepared-statements配置为false。缘由是:PSCache对支持游标的数据库性能提高巨大,好比说oracle,在mysql下建议关闭。数据库
InfoQ上有一篇文章对其MySQL是否要开启PSCache作了介绍,地址:www.infoq.cn/article/201…浏览器
关于url和driver-class-name配置项的说明。缓存
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
复制代码
先说驱动类driver-class-name配置项,为何配置值是com.mysql.cj.jdbc.Driver
,而不是com.mysql.jdbc.Driver
?
缘由是: 从mysql6开始,驱动包开始使用新的驱动,即
com.mysql.cj.jdbc.Driver
。若是使用的mysql为6.0以后的版本,但使用的是旧的5.0版本的驱动包,则驱动配置为com.mysql.jdbc.Driver
,不过这种使用旧的5.0驱动包可能会出现一些意想不到的问题,因此仍是建议将驱动包升级,而后改变驱动的值。
解决方法:
<1> 先查一下本身的mysql版本。
在mysql中执行:select VERSION();
![]()
相关文章介绍连接地址:blog.csdn.net/lamp_yang_3…
<2> 若mysql版本高于5.0,则将驱动类driver-class-name配置为:
com.mysql.cj.jdbc.Driver
相关异常信息: Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
再说url配置项,主要是serverTimezone=GMT%2B8
时区
因为mysql版本升级后,新版数据库和系统之间有了时区差别,须要指定时区serverTimezone=GMT%2B8
(北京时间东八区),UTC表明是全球标准时间,北京时间东八区领先UTC 8个小时。
若是配置serverTimezone=UTC
(全球标准时间),链接不报错,但实际数据库中显示的时间比咱们插入时的时间晚8小时。
# 北京时间东八区
serverTimezone=GMT%2B8
# 上海时间
serverTimezone=Asia/Shanghai
# 重庆时间
serverTimezone=Asia/Chongqing
复制代码
能够参考如下文章介绍:
JDBC链接Mysql数据库出现的问题汇总:www.jianshu.com/p/bbc76bc5b…
mysql时区错误及解决办法: www.jianshu.com/p/0d53218da…
为什么没有asia/beijing时区?:www.cnblogs.com/softidea/p/…
进入druid-1.1.10.jar所在文件夹,打开命令行,执行以下命令:
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools 123456
说明:123456是要加密的明文密码
复制代码
输出
privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAljkI+2y1h27So4a0+OyZGp093q0VrMZKKgZHCX1X3VHdG914tZsQIpm4SJ9gAQDCeRh5ZcxOI2v2inD+0AQN0QIDAQABAkAmkXom4yAwJ1nZNiqchlJArQJHe3THKRm9dGMkopO+dHN2lKqP1X4FUS7/sPf08uQ+ijH063St+YrNk6qj3nUpAiEAxfGjUG2ZbIYjKqAx9NhGFi1s4xwzp0kK6hUkvRhpKI8CIQDCSFHQVWT2PopjaLWaDTVYUebLZlSOuz8rU6LayFrTnwIhALCIYG5KUJpIxvQtCmCiwV7mBEZH0IlQyzsYwDskmiRhAiBv4Q2cF1DorOMsk+PgLrMFhUSO5QLUnueln6gsrSwAqQIgH0jlqWKuwuuTwZSM4P/HS4YaacrLL70Fe101YF4fjCs=
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJY5CPtstYdu0qOGtPjsmRqdPd6tFazGSioGRwl9V91R3RvdeLWbECKZuEifYAEAwnkYeWXMTiNr9opw/tAEDdECAwEAAQ==
password:O50UxdSUY9ZGfafYEh9/ovo5Lb8b/FaGlOaZstW+UqMrrz+fanCSALo9OJHrpykY2fyrKdcjp5aE57dzhFRMPQ==
说明:privateKey是私钥,publicKey是公钥,password是加密后的密码
复制代码
application.yml中druid配置属性更改后以下:(application.properties中配置相似)
spring:
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: O50UxdSUY9ZGfafYEh9/ovo5Lb8b/FaGlOaZstW+UqMrrz+fanCSALo9OJHrpykY2fyrKdcjp5aE57dzhFRMPQ==
driver-class-name: com.mysql.cj.jdbc.Driver
# 初始化物理链接个数
initial-size: 1
# 最大链接池数量
max-active: 20
# 最小链接池数量
min-idle: 5
# 获取链接时最大等待时间(ms)
max-wait: 60000
# 开启缓存preparedStatement(PSCache)
pool-prepared-statements: true
# 启用PSCache后,指定每一个链接上PSCache的大小
max-pool-prepared-statement-per-connection-size: 20
# 用来检测链接是否有效的sql
validation-query: select 'x'
# 申请链接时不检测链接是否有效
test-on-borrow: false
# 归还链接时不检测链接是否有效
test-on-return: false
# 申请链接时检测,若是空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测链接是否有效(不影响性能)
test-while-idle: true
# 检测链接的间隔时间,若链接空闲时间 >= minEvictableIdleTimeMillis,则关闭物理链接
time-between-eviction-runs-millis: 60000
# 链接保持空闲而不被驱逐的最小时间(ms)
min-evictable-idle-time-millis: 300000
# 配置监控统计拦截的filters(不配置则监控界面sql没法统计),监控统计filter:stat,日志filter:log4j,防护sql注入filter:wall
filters: config,stat,log4j,wall
# 支持合并多个DruidDataSource的监控数据
use-global-data-source-stat: true
# 经过connectProperties属性来打开mergeSql(Sql合并)功能;慢SQL记录(配置超过5秒就是慢,默认是3秒);解密使能
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJY5CPtstYdu0qOGtPjsmRqdPd6tFazGSioGRwl9V91R3RvdeLWbECKZuEifYAEAwnkYeWXMTiNr9opw/tAEDdECAwEAAQ==
复制代码
配置变动说明:
首先把密码改成加密后的密码
password: O50UxdSUY9ZGfafYEh9/ovo5Lb8b/FaGlOaZstW+UqMrrz+fanCSALo9OJHrpykY2fyrKdcjp5aE57dzhFRMPQ==
复制代码
filters配置值中增长config
filters: config,stat,log4j,wall
复制代码
说明:Druid对数据库密码加密和解密用的都是com.alibaba.druid.filter.config.ConfigFilter这个类,因此在数据源配置项filters上必须添加上config值,不然始终会抛出数据库链接异常。
增长connection-properties链接属性配置项
connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJY5CPtstYdu0qOGtPjsmRqdPd6tFazGSioGRwl9V91R3RvdeLWbECKZuEifYAEAwnkYeWXMTiNr9opw/tAEDdECAwEAAQ==
说明:
connection-properties配置值可配置多个,用“;”分隔
config.decrypt=true 表示解密使能
config.decrypt.key=${publickey} 解密使用上面获得的publicKey公钥
复制代码
阿里的Druid GitHub上有对数据库密码加密的介绍,地址:github.com/alibaba/dru…