之前项目使用的连接池都是Durid(德鲁伊),功能很丰富,记录一下使用方式:
maven导入Durid架包:
<!-- SPRINGBOOT DRUID -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
application.yml 配置:
spring:
# druid数据源配置
datasource.druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip:端口号/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
# 能日赚30手赚试玩平台,推荐使用iphone操作
# https://mp.weixin.qq.com/s?__biz=MzIyODgxNjkyOQ==&mid=100000040&idx=1&sn=47c0245f9dbe70f3ad6b2540209af2c2&chksm=684d60665f3ae97095ba07d8c6804bac4f55dbc6e7100fbb233945f65364df88682d41332eb7&xtrack=1&scene=0&subscene=10000&clicktime=1616647421&enterid=1616647421&ascene=7&devicetype=android-29&version=28000165&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AdxLWFyJlgtM6uFZCpgWtBk%3D&pass_ticket=G8rEeGdox4FPpICRkrKy6ho2QZozCzXi%2Be7gV5bXnQaXoZK2pw4S8Wf2j%2Bt3D8mi&wx_header=1
#druid连接池配置
# 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
initial-size: 1
# 最大连接池数量
max-active: 20
# 最小连接池数量
min-idle: 1
# 获取连接时最大等待时间,单位毫秒
max-wait: 60000
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
max-open-prepared-statements: 20 #和上面的等价
# 验证连接有效与否的SQL,不同的数据配置不同
validation-query: select 1 from dual
validation-query-timeout: 3000
# 申请连接时执行validationQuery检测连接是否有效
test-on-borrow: false
# 归还连接时执行validationQuery检测连接是否有效
test-on-return: false
# 执行validationQuery检测连接是否有效
test-while-idle: true
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 6000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
# 通过别名的方式配置扩展插件
# 监控统计 stat
# 防御sql注入 wall
filters: stat,wall
# WEB方式监控配置
stat-view-servlet:
enabled: true #是否启用StatViewServlet默认值true
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: 123456
配置了web监控方式配置,在拦截器中开放 /druid/*
路径,在浏览器中输入http://ip:端口号/druid/
,会进入到durid监控登录界面。
输入配置中的login-username
、login-password
进入监控台
后面看到出了HikariCP连接池,说比Durid连接池更快,于是尝试更换,springboot 2.x 版本默认连接池就是 HikariCP,所以pom.xml中无需再导入HikariCP的架包,再次导入架包会提示错误
spring:
# 数据库配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip:端口号/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
# 能日赚30手赚试玩平台,推荐使用iphone操作
# https://mp.weixin.qq.com/s?__biz=MzIyODgxNjkyOQ==&mid=100000040&idx=1&sn=47c0245f9dbe70f3ad6b2540209af2c2&chksm=684d60665f3ae97095ba07d8c6804bac4f55dbc6e7100fbb233945f65364df88682d41332eb7&xtrack=1&scene=0&subscene=10000&clicktime=1616647421&enterid=1616647421&ascene=7&devicetype=android-29&version=28000165&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AdxLWFyJlgtM6uFZCpgWtBk%3D&pass_ticket=G8rEeGdox4FPpICRkrKy6ho2QZozCzXi%2Be7gV5bXnQaXoZK2pw4S8Wf2j%2Bt3D8mi&wx_header=1
# Hikari 连接池配置,springboot2.0之后,采用的默认数据库连接池就是Hikari
hikari:
# 最小空闲连接数量
minimum-idle: 5
# 连接池最大连接数,默认是10
maximum-pool-size: 15
# 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
# 空闲连接存活最大时间,默认600000(10分钟)
idle-timeout: 30000
# 连接池名称
pool-name: DatebookHikariCP
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
max-lifetime: 1800000
# 数据库连接超时时间,默认30秒,即30000
connection-timeout: 30000
connection-test-query: SELECT 1
运行项目时,看到输出日志中启动了连接池,说明连接池创建成功
2021-03-21 22:12:18,179 - DatebookHikariCP - Starting...
2021-03-21 22:12:18,399 - DatebookHikariCP - Start completed.
2021-03-21 22:12:18,427 - HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
HikariCP 没有自带的监控台,需要另外使用插件或工具,后续继续学习