前言:
本文主要针对c3p0、dbcp、druid、hikariCP主流数据库连接池,进行参数配置信息梳理。
基础的参数配置:
- name:连接池用户自定义名称(经测试c3p0无该属性,hikariCP为poolname)
- driverClass : 数据库驱动(比如com.mysql.cj.jdbc.Driver,或者oracle数据库的驱动)
- jdbcUrl: jdbc数据库连接地址(例如jdbc:mysql://localhost:3306/test)
- username:数据库用户名
- password:和数据库用户名对应的数据库密码
**连接数信息的相关配置:
注意事项:
- DBCP连接池中maxIdle值与maxActive值应配置的接近,当连接数超过maxIdle值后,结束使用的连接会立即被销毁
- 个人觉得是因为maxIdle和maxActive两个参数太过于烧脑,druid中maxIdle参数已取消使用,即使配置了也不生效
连接池名称 | 参数 | 参数解释 | 默认值 |
druid、dbcp、c3p0 | initialSize、initialSize、initialPoolSize | 初始化连接数 | 0、0、3 |
druid、dbcp、c3p0、hikariCP | maxActive、maxActive、maxPoolSize、maximumPoolSize | 最大连接数 | 8、8、15、10 |
druid、dbcp、c3p0、hikariCP | minIdle、minIdle、minPoolSize、minimumIdle | 最小连接数 | 0、0、3、10 |
c3p0 | acquireIncrement | 连接池在无空闲连接可用时一次性创建的新数据库连接数 | 3 |
连接时间信息的相关配置:
注意事项:
- druid、dbcp的timeBetweenEvictionRunsMillis参数需要配合minEvictableIdleTimeMillis参数使用,代表每x毫秒回收超过x毫秒空闲的连接
- c3p0的idleConnectionTestPeriod参数需要配合maxIdleTime参数使用,单位为秒
- 连接最大生存期设置为0,视为无限寿命
- maxIdleTimeExcessConnections用于在池未加载时最小化c3p0池所持有的Connections数。默认情况下,c3p0池在负载下增长,但只有在Connections通过Connection测试失败或通过上述参数过期时才会收缩。minPoolSize只有在与之结合使用时才有意义maxIdleTimeExcessConnections,否则,它将完全被忽略。
- dbcp连接泄露时默认每次扫描关闭3个空闲连接可通过配置numTestsPerEvictionRun参数修改,druid连接泄露时默认每次扫描关闭20个空闲连接
连接池名称 | 参数 | 参数解释 | 默认值 |
druid、dbcp、c3p0 、hikariCP | maxWait、maxWait、checkoutTimeout、connectionTimeout | 当连接池用完时客户端调用getConnection()后等待获取新连接的时间.即最大等待时间 | 0、0、0、30000 |
druid、dbcp、c3p0 | timeBetweenEvictionRunsMillis 、timeBetweenEvictionRunsMillis 、idleConnectionTestPeriod | 空闲连接回收配置 | |
c3p0、hikariCP | maxConnectorAge、maxLifetime | 连接的最大生存期 | 0,30分钟 |
druid、dbcp | removeAbandoned、removeAbandoned | 是否开启连接泄漏回收 | false,false |
druid、dbcp | removeAbandonedTimeout、removeAbandonedTimeoutMillis | 连接泄漏回收参数时间配置 | 300秒,300秒 |
c3p0 | maxIdleTimeExcessConnections | 负载结束后最小化连接数 | 3 |
测试信息的相关配置:
注意事项:
- hikariCP 强烈建议不建议使用connectionTestQuery参数
连接池名称 | 参数 | 参数解释 | 默认值 |
druid、dbcp、c3p0 、hikariCP | validationQuery、validationQuery、preferredTestQuery、connectionTestQuery | 测试连接的sql语句 | |
druid、dbcp ,hikariCP | testOnBorrow、testOnBorrow,connectionInitSql | 申请连接时执行validationQuery检测连接是否有效 | true、true |
druid、dbcp | testOnReturn、testOnReturn | 归还连接时执行validationQuery检测连接是否有效 | false、false |
druid、dbcp | testWhileIdle、testWhileIdle | 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 | false、false |
特性相关的相关配置:
注意事项:
- druid的filters参数,例:druidDataSource.setFilters(“stat,config,slf4j”);proxyFilters参数类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
- hikariCP catalog参数设置默认目录为支持目录的概念数据库。如果未指定此属性,则使用由JDBC驱动程序定义的默认目录。 默认:驱动程序默认;autoCommit此属性控制从池返回的连接的默认自动提交行为。它是一个布尔值。 默认值:true;schema该属性设置的默认模式为支持模式的概念数据库。如果未指定此属性,则使用由JDBC驱动程序定义的默认模式。 默认:驱动程序默认
连接池名称 | 参数 | 参数解释 | 默认值 |
druid | filters | 属性类型是字符串,通过别名的方式配置扩展插件 | |
druid | proxyFilters | 配置扩展插件参数 | |
hikariCP | catalog | 设置默认目录 | |
hikariCP | autoCommit | 设置默认自动提交 | true |
hikariCP | schema | 设置默认模式 |