druid 参数配置详解

druid 参数配置详解

1 初始化连接

在druid连接数据库的配置文件中,读写datasource的bean中 要有 init-method="init". 配置,否则在启动连接池时不会执行初始化操作。 示例:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
.......
  </bean>

2 参数配置及说明

通过 spring 配置文件application-context.xml中的dataSource配置说明各个参数的配置。

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      <!-- ”连接“的基本属性 url、user、password -->
      <!-- jdbc url:
      <property name="url" value="jdbc_url" />
      <property name="username" value="${jdbc_user}" />
      <property name="password" value="${jdbc_password}" />

      <!-- 启动druid时,同步建立 N 个连接-->
      <property name="initialSize" value="100" />
      <!-- 连接池中最多有 N 个活动连接 -->
      <property name="maxActive" value="1000" />

      <!-- 程序向连接池请求连接这一操作的最大等待时间,超过该时限后, 认为本次失败,即连接池没有可用连接,将退出请求操作,单位毫秒,设置为-1时表示无限等待 -->
      <property name="maxWait" value="60000" />

      <!-- 连接池回收空闲连接的机制,包括检查和回收两部分 -->

      <!-- 检查范围: 连接的空闲时长大于N毫秒后,将被连接池考虑回收。该参数决定了回收机制的检查范围 -->
      <property name="minEvictableIdleTimeMillis" value=300000 />

      <!-- 检查频率: 检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查。 -->
      <property name="timeBetweenEvictionRunsMillis" value=-1 />

      <!-- 回收限制条件1: 回收空闲连接时,将保证至少有N个空闲连接 -->
      <property name="minIdle" value="20" />

      <!-- 开启强制回收连接功能,强制回收连接要求程序在get到连接后的N秒内必须close连接,否则druid会强制中止该连接,不管该连接中是否有事务在运行。 -->
      <property name="removeAbandoned" value="true"/>

      <!-- 当程序get到一个连接后,在 N 秒内必须 Close,否则连接池也会弄死它, 需要考虑一个合理的值,避免业务跑不完-->
      <property name="removeAbandonedTimeout" value="180"/>

      <!-- 当弄死一个程序连接后,是否记录到日志中 -->
      <property name="logAbandoned" value="true" />

      <!-- 基本所有关系型 数据库都会将长时间的空闲连接强制断开。但是该连接在连接池中仍存在。程序获取这些被断开的连接时会报错 -->
      <!-- 下面四个参数是用于检查连接是否有效,是否可用 -->
      <!-- 开启对空闲连接的有效性检测 -->
      <property name="testWhileIdle" value="true" />
      <!-- 确认连接是否有效的SQL -->
      <property name="validationQuery" value="SELECT 'x'" />

      <!-- 下面两个参数影响性能, 不建议使用 -->
      <!-- 程序获取连接池中的连接时进行检测 -->
      <property name="testOnBorrow" value="false" />
      <!-- 程序归还连接时,检测连接是否仍有效 -->
      <property name="testOnReturn" value="false" />

      <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="true"/>
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
      <!--配置监控统计拦截的filters,属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat;日志用的filter:log4j;防御SQL注入的filter:wall -->
      <property name="filters" value="stat,wall,slf4j"/>
      <!-- 通过connectProperties属性来打开mergeSql功能;慢SQL记录-->
      <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000" />
</bean>

在使用阿里的SLB时,建议将timeBetweenEvictionRunsMillis设置为2秒或者负值(关闭检查机制)。否则,连接进程会报:

Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicaiotnsException: Communications link failure

Author: halberd.lee

Created: 2019-08-05 Mon 18:35

Validate

猜你喜欢

转载自www.cnblogs.com/halberd-lee/p/11304790.html