以druid来举例
(1)maxWait
表示从池里获取连接的等待时间,万一你暂时没有可用的连接,就可能要等待别的连接用完释放,你再去使用,通常建议设置在1000以上,就是等待1s以上,比如你可以设置1200,因为有的时候要等待建立新的TCP连接,最多在1s内,那你就得等一会儿
如果这个参数默认设置为0,意思就是无限的等待获取连接,在高并发场景下,可能瞬间连接池耗尽,大量的请求都卡死在这里等待获取连接,进而导致你tomcat里没有可用的线程,服务就是一个假死的样子
你还会拖累调用你的其他服务,其他服务都卡死在调用你的请求上,可能会导致整体系统大量服务的雪崩
你设置一个靠谱点的参数,那么起码大量线程获取不到连接,1s左右快速就失败了,这个时候还不至于说拖死整个服务,也不至于说拖死其他调用你的服务,还不至于会发生服务雪崩的问题
(2)connectionProperties
里面可以放connectionTimeout和socketTimeout,分别代表建立TCP连接的超时时间,以及发送请求后等待响应的超时时间,推荐connectionTimeout设置为1200,socketTimeout设置为3000
之所以必须设置他们俩,是因为高并发场景下,万一遇到网络问题,可能会导致你跟数据库的Socket连接异常无法通信,此时你Socket可能一直卡死等待某个请求的响应,然后其他请求无法获取连接,只能是重启系统重新建立连接才行
所以设置一下超时时间,可以让网络异常之后,连接自动超时断开重连
(3)maxActive
最大连接池数量,一般建议是设置个20就够了,如果确实有高并发场景,可以适当增加到3~5倍,但是不要太多,其实一般这个数字在几十到100就很大了,因为这仅仅是你一个服务连接数据库的数量,你数据库整体能承受的连接数量是有限的
而且连接越多不是越好,数据库连接太多了,会导致cpu负载很高,可能反而会导致性能降低的,所以这个参数你一般设置个20,最多加到个几十,其实就差不多了
更多的,你反而应该是优化你每个请求的性能,别让一个请求占用连接太长的时间