Druid连接池配置

发布时间 2023-05-04 17:16:26作者: 机械公敌
  • 参数汇总
 <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的执行周期,具体的执行逻辑为:

  1. minEvictableIdleTimeMillis连接空闲时间大于该值并且池中空闲连接大于minIdle则关闭该连接。
  2. maxEvictableIdleTimeMillis连接空闲时间大于该值,不管minIdle都关闭该连接。
  3. 只有空闲时间大于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