zoukankan      html  css  js  c++  java
  • druid 参数配置详解

    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配置说明各个参数的配置。

    属性 说明 建议值
    url 数据库的jdbc连接地址。一般为连接oracle/mysql。示例如下:  
      mysql : jdbc:mysql://ip:port/dbname?option1&option2&…  
      oracle : jdbc:oracle:thin:@ip:port:oracle_sid  
         
    username 登录数据库的用户名  
    password 登录数据库的用户密码  
    initialSize 启动程序时,在连接池中初始化多少个连接 10-50已足够
    maxActive 连接池中最多支持多少个活动会话  
    maxWait 程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池 100
      没有可用连接,单位毫秒,设置-1时表示无限等待  
    minEvictableIdleTimeMillis 池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将 见说明部分
      回收该连接,要小于防火墙超时设置  
      net.netfilter.nf_conntrack_tcp_timeout_established的设置  
    timeBetweenEvictionRunsMillis 检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查  
    keepAlive 程序没有close连接且空闲时长超过 minEvictableIdleTimeMillis,则会执 true
      行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超  
      过minIdle指定的连接个数。  
    minIdle 回收空闲连接时,将保证至少有minIdle个连接. 与initialSize相同
    removeAbandoned 要求程序从池中get到连接后, N 秒后必须close,否则druid 会强制回收该 false,当发现程序有未
      连接,不管该连接中是活动还是空闲, 以防止进程不会进行close而霸占连接。 正常close连接时设置为true
    removeAbandonedTimeout 设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此 应大于业务运行最长时间
      值后,druid将强制回收该连接,单位秒。  
    logAbandoned 当druid强制回收连接后,是否将stack trace 记录到日志中 true
    testWhileIdle 当程序请求连接,池在分配连接时,是否先检查该连接是否有效。(高效) true
    validationQuery 检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果  
      正常返回,则表示连接可用,否则表示连接不可用  
    testOnBorrow 程序 申请 连接时,进行连接有效性检查(低效,影响性能) false
    testOnReturn 程序 返还 连接时,进行连接有效性检查(低效,影响性能) false
    poolPreparedStatements 缓存通过以下两个方法发起的SQL: true
      public PreparedStatement prepareStatement(String sql)  
      public PreparedStatement prepareStatement(String sql,  
      int resultSetType, int resultSetConcurrency)  
    maxPoolPrepareStatementPerConnectionSize 每个连接最多缓存多少个SQL 20
    filters 这里配置的是插件,常用的插件有: stat,wall,slf4j
      监控统计: filter:stat  
      日志监控: filter:log4j 或者 slf4j  
      防御SQL注入: filter:wall  
    connectProperties 连接属性。比如设置一些连接池统计方面的配置。  
      druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  
      比如设置一些数据库连接属性:  
         
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    ....
    </bean>
    

    3 注意事项

    3.1 底层连接

    另外还有一个参数 accessToUnderlyingConnectionAllowed. 该参数设置是否允许使用底层连接。 如果设置为true,可以使用下面的方式来获取底层连接:

    Connection conn = ds.getConnection();
    
    Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
    
    ...
    
    conn.close();
    

    默认false不开启, 因为代码逻辑不正确,可能会带来风险。建议需要直接访问驱动的特定功能时再使用,并且经过多次测试, 明确代码每一步可能带来的风险。

    3.2 空闲检查问题

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

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

    4 不同配置文件

    本部分只通过示例的方式展示在不同的环境中进行配置的语法格式,具体要配置哪些参数,请参照 参数配置及说明.

    其中 spring boot application.properties 中的配置最为完整,建议参考。

    4.1 jdbc中配置连接池

    jdbc.properties:
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://172.49.15.55:3306/testdb?useUnicode=true&amp;characterEncoding=utf-8
    jdbc.username=test
    jdbc.password=test
    jdbc.filters=stat
    jdbc.maxActive=300
    jdbc.initialSize=2
    jdbc.maxWait=60000
    jdbc.minIdle=1
    jdbc.timeBetweenEvictionRunsMillis=60000
    jdbc.minEvictableIdleTimeMillis=300000
    jdbc.validationQuery=SELECT 'x'
    jdbc.testWhileIdle=true
    jdbc.testOnBorrow=false
    jdbc.testOnReturn=false
    jdbc.poolPreparedStatements=false
    jdbc.maxPoolPreparedStatementPerConnectionSize=50
    

    4.2 springs中配置druid

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
          <!-- ”连接“的基本属性  -->
          <property name="url" value="jdbc_url" />
          <property name="username" value="${jdbc_user}" />
          <property name="password" value="${jdbc_password}" />
          <!-- 连接池属性 -->
          <property name="initialSize" value="100" />
          <property name="maxActive" value="1000" />
          <property name="maxWait" value="60000" />
          <property name="minEvictableIdleTimeMillis" value=300000 />
          <property name="keepAlive" value=true />
          <property name="timeBetweenEvictionRunsMillis" value=-1 />
          <property name="minIdle" value="20" />
          <property name="removeAbandoned" value="true"/>
          <property name="removeAbandonedTimeout" value="180"/>
          <property name="logAbandoned" value="true" />
          <property name="testWhileIdle" value="true" />
          <property name="validationQuery" value="SELECT 'x'" />
          <property name="testOnBorrow" value="false" />
          <property name="testOnReturn" value="false" />
          <property name="poolPreparedStatements" value="true"/>
          <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
          <property name="filters" value="stat,wall,slf4j"/>
          <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000" />
    </bean>
    

    4.3 spring boot application.properties配置

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    #驱动配置信息
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    #基本连接信息
    spring.datasource.username = root
    spring.datasource.password = root
    spring.datasource.url=jdbc:mysql://192.168.153.23:3306/mytest?useUnicode=true&characterEncoding=utf-8
    
    #连接池属性
    spring.datasource.druid.initial-size=15
    spring.datasource.druid.max-active=100
    spring.datasource.druid.min-idle=15
    spring.datasource.druid.max-wait=60000
    spring.datasource.druid.time-between-eviction-runs-millis=60000
    spring.datasource.druid.min-evictable-idle-time-millis=300000
    spring.datasource.druid.test-on-borrow=false
    spring.datasource.druid.test-on-return=false
    spring.datasource.druid.test-while-idle=true
    spring.datasource.druid.validation-query=SELECT 1
    spring.datasource.druid.validation-query-timeout=1000
    spring.datasource.druid.keep-alive=true
    spring.datasource.druid.remove-abandoned=true
    spring.datasource.druid.remove-abandoned-timeout=180
    spring.datasource.druid.log-abandoned=true
    spring.datasource.druid.pool-prepared-statements=true
    spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
    spring.datasource.druid.filters=stat,wall,slf4j
    spring.datasource.druid.use-global-data-source-stat=true
    spring.datasource.druid.preparedStatement=true
    spring.datasource.druid.maxOpenPreparedStatements=100
    spring.datasource.druid.connect-properties.mergeSql=true
    spring.datasource.druid.connect-properties.slowSqlMillis=5000
    

    Author: halberd.lee

    Created: 2019-09-11 Wed 01:02

    Validate

  • 相关阅读:
    PowerDesigner如何导出建表sql脚本(转)
    excel插入行时提示不能将对象移到工作表外,怎么解决!!
    Axure知识点
    移动互联网学习的点
    什么是大数据?
    [Android开源项目] GitHub开源项目总结 (转)
    程序员自我提高的几点建议 很实诚(转)
    程序员必须进行的10项投资(转)
    安卓版本的问题
    Android APK反编译详解(转)
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/11304790.html
Copyright © 2011-2022 走看看