Druid链接池的配置和使用
1.URL参数配置
1.1.实例:
jdbc:mysql://192.168.1.8:3306/mytest?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&connectTimeout=60000&socketTimeout=60000
1.2.重要参数
connectTimeout
建立链接需要的时间。该参数只在建立链接阶段生效。默认是0,不超时。建议配置connectTimeout=60000,单位毫秒。
socketTimeout
发送请求给数据库(建立链接后),数据库处理的最大时间;超过这个客户端报超时超时异常(Caused by: java.net.SocketTimeoutException: Read timed out)。默认是0,不超时。建议配置socketTimeout=60000,单位毫秒。
autoReconnect
是否自动重连。默认false。mysql服务端参数wait_timeout,其默认值为 28800秒(8小时),其意义为如果一个连接闲置超过这个选项所设置的秒数,MySQL会主动断开这个连接。如果无法保证应用程序在设定的秒数内至少有一次操作,添加autoReconnect=true这个参数,即能解决这个问题。
maxReconnects
autoReconnect设置为true时,重试连接的次数,默认3。
initialTimeout
autoReconnect设置为true时,两次重连之间的时间间隔,默认2,单位:秒
useSSL
使用ssl,默认为true(5.5.45+, 5.6.26+, 5.7.6+ or 8.0.13+)。根据情况改成false
allowMultiQueries
支持批量操作:在sql语句后携带分号,实现多语句执行;执行批处理,同时发出多个SQL语句。默认为false。建议设置为true
useUnicode 和 characterEncoding
指定数据库的编解码格式。根据具体情况配置。建议配置useUnicode=true&characterEncoding=UTF-8
2.Druid连接池配置
2.1.连接池的初始值、最大值、最小值
实例:
initialSize: 5
minIdle: 6
maxActive: 10
项目启动时,会自动初始化initialSize个连接出来(没有流量访问数据库也会创建),这几个链接会一直存在。可以通过数据库命令SHOW PROCESSLIST
查看初始化的链接是5个:

当客户端查询数据库的并发小于5时,就一直使用这五个链接;当客户端的并发5时,会慢慢的新建链接,直到最多建了10个链接为止。并发大于10时,其他的请求就需要等待可用的链接。

当客户端的流量下来后,就会回收部分空闲链接,最终保留6个链接。

在Druid的链接池中,maxIdle已经不在使用了,
2.2.获取连接的等待时间
实例:
maxWait: 6000
获取连接池中的连接时的最大等待时间,单位是毫秒。如果这个时间内未获得可用链接则报错:nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 6000, active 10, maxActive 10, creating 0。这个报错表明获取链接超时了,而且数据库的10个链接都被占用,也不能创建新的链接了。
2.3.回收连接池中的链接
实例:
timeBetweenEvictionRunsMillis: 2000
minEvictableIdleTimeMillis: 10000
访问流量大的时候,连接池中的连接数是maxActive: 10,但是当流量下来后,需要回收部分空闲的链接,最终让连接池中保留至少minIdle: 6个链接。回收的过程就需要定时对连接进行检查,判断连接是否应该回收。上面的配置就是每隔timeBetweenEvictionRunsMillis: 2000ms对连接池的连接做一次检查,如果有连接空闲时间超过minEvictableIdleTimeMillis: 10000ms就回收该链接(连接保持空闲而不被驱逐的最小时间)。
2.4.校验链接池中的链接是否有效
实例:
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
validationQueryTimeout:10
校验链接是否有效。
校验的方式:使用待校验的连接在在数据库上执行一下校验的sql,这里使用SELECT 1
,一定要保证改sql是该数据能执行的,不同的数据库的校验sql可能不一样。
校验的时机:通常是在连接空闲时校验(testWhileIdle: true),也可以在获取连接时校验(testOnBorrow: true,这个配置会降低性能),也可以在归还连接到连接池时校验(testOnReturn: true,这个配置会降低性能)。
validationQueryTimeout是检测连接是否有效的超时时间,单位:秒。
如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
2.5.事务控制
# 事务控制 默认true
defaultAutoCommit: true
# 默认
defaultTransactionisolation:
这两个参数通常使用默认值,事务会自动提交。如果defaultAutoCommit=false
,即使在不加@Transactional主键的情况下,执行DQL,在数据库中也会出现事务(当DQL执行时间较长时,可以通过SELECT * FROM information_schema.innodb_trx查看到事务的存在)。
Druid链接池的事务默认配置可以在源码中看到:

3.阿里官方druid参考配置


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2023-01-08 IDEA中代码不小心删除,或者改了半天想回退到某个特定时间怎么办? IEDA代码回退 点击项目名称->右键->选择Local History ->show History