Druid连接池配置
- 参数汇总
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!--jdbc_url是AnalyticDB MySQL集群的连接地址URL,可以在控制台的集群信息页面获取连接URL。-->
<property name="url" value="${jdbc_url}" />
<!--jdbc_user是AnalyticDB MySQL集群中的用户账号:高权限账号或者普通账号。-->
<property name="username" value="${jdbc_user}" />
<!--jdbc_password是AnalyticDB MySQL集群中用户账号对应的密码。-->
<property name="password" value="${jdbc_password}" />
<!--配置初始化连接池大小、最小连接数、最大连接数。-->
<property name="initialSize" value="5" />
<property name="minIdle" value="10" />
<property name="maxActive" value="20" />
<!--配置获取连接等待超时的时间。-->
<property name="maxWait" value="60000" />
<!--配置一个连接在连接池中的最小生存时间、最大生存时间,超过最大生存时间会被移除,单位毫秒。-->
<property name="minEvictableIdleTimeMillis" value="600000" />
<property name="maxEvictableIdleTimeMillis" value="900000" />
<!--配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒。 默认是60s,太长可能会导致无法及时检测到连接中断。-->
<property name="timeBetweenEvictionRunsMillis" value="2000" />
<!--配置从连接池获取连接时,当连接空闲时间大于timeBetweenEvictionRunsMillis时是否检查连接有效性,true每次都检查;false不检查。-->
<property name="testWhileIdle" value="true" />
<!--配置从连接池获取连接时和向连接池归还连接时,是否检查连接有效性。-->
<!--每次获取或归还连接都检测太频繁,除非特别重要或网络特别不可靠等情况,建议用testWhileIdle + timeBetweenEvictionRunsMillis代替。-->
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!--配置是否定期探活、探活间隔。-->
<property name="keepAlive" value="true" />
<property name="keepAliveBetweenTimeMillis" value="30000" /> <!--默认120s。-->
<!--配置一个连接最大使用次数,避免长时间使用相同连接造成服务器端负载不均衡。-->
<property name="phyMaxUseCount" value="1000" />
<!--探活、验证链接有效性的查询,新版本默认使用mysqlPing代替-->
<property name="validationQuery" value="select 1" />
<!--配置监控统计拦截的filters。-->
<property name="filters" value="stat" />
</bean>
- 参数详解
minEvictableIdleTimeMillis、maxEvictableIdleTimeMillis、keepAlive、keepAliveBetweenTimeMillis均生效在DestroyTask中,timeBetweenEvictionRunsMillis是DestroyTask的执行周期,具体的执行逻辑为:
- minEvictableIdleTimeMillis连接空闲时间大于该值并且池中空闲连接大于minIdle则关闭该连接。
- maxEvictableIdleTimeMillis连接空闲时间大于该值,不管minIdle都关闭该连接。
- 只有空闲时间大于keepAliveBetweenTimeMillis并且小于minEvictableIdleTimeMillis时keepAlive=true才会生效。
除此之外,如果testOnBorrow==false并且testWhileIdle==true,则在应用获取连接的时候会判断连接的空闲时间是否大于timeBetweenEvictionRunsMillis,如果大于则会验证该连接是否有效。
参考文档:
https://www.jianshu.com/p/a8d20e002442
https://www.alibabacloud.com/help/zh/analyticdb-for-mysql/latest/druid-connection-pool