连接池(c3p0+druid)配置

一、C3P0

#最常用配置
#initialPoolSize:连接池初始化时创建的连接数,default : 3,取值应在minPoolSize与maxPoolSize之间

c3p0.initialPoolSize=10

#minPoolSize:连接池保持的最小连接数,default : 3

c3p0.minPoolSize=10

#maxPoolSize:连接池中拥有的最大连接数,如果获得新连接时会使连接总数超过这个值则不会再获取新连接,而是等待其他连接释放,所以这个值有可能会设计地很大,default : 15

c3p0.maxPoolSize=50

#acquireIncrement:连接池在无空闲连接可用时一次性创建的新数据库连接数,default : 3
c3p0.acquireIncrement=5


#管理连接池的大小和连接的生存时间
#maxIdleTime:连接的最大空闲时间,如果超过这个时间,某个数据库连接还没有被使用,则会断开掉这个连接。如果为0,则永远不会断开连接,即回收此连接。default : 0 单位 s

c3p0.maxIdleTime=600

#idleConnectionTestPeriod:每900秒检查所有连接池中的空闲连接
c3p0.idleConnectionTestPeriod=900


#配置PreparedStatement缓存
#连接池为数据源缓存的PreparedStatement的总数。由于PreparedStatement属于单个Connection,所以这个数量应该根据应用中平均连接数乘以每个连接的平均PreparedStatement
#来计算。同时maxStatementsPerConnection的配置无效。default : 0(不建议使用)

c3p0.maxStatements=500

#连接池为数据源单个Connection缓存的PreparedStatement数,这个配置比maxStatements更有意义,因为它缓存的服务对象是单个数据连接,
#如果设置的好,肯定是可以提高性能的。为0的时候不缓存。default : 0(看情况而论)
c3p0.maxStatementsPerConnection=30


#重连相关配置 
#acquireRetryAttempts:连接池在获得新连接失败时重试的次数,如果小于等于0则无限重试直至连接获得成功。default : 30(建议使用)

c3p0.acquireRetryAttempts=5

#acquireRetryDelay:两次连接中间隔时间,单位毫秒,连接池在获得新连接时的间隔时间。default : 1000 单位ms(建议使用)

c3p0.acquireRetryDelay=1000

#breakAfterAcquireFailure:如果为true,则当连接获取失败时自动关闭数据源,除非重新启动应用程序。所以一般不用。default : false(不建议使用)

c3p0.breakAfterAcquireFailure=false

#checkoutTimeout:配置当连接池所有连接用完时应用程序getConnection的等待时间。为0则无限等待直至有其他连接释放或者创建新的连接,
#                 不为0则当时间到的时候如果仍没有获得连接,则会抛出SQLException。
                  其实就是acquireRetryAttempts*acquireRetryDelay。default : 0(与上面两个,有重复,选择其中两个都行)
c3p0.checkoutTimeout=100


#其他
#autoCommitOnClose:连接池在回收数据库连接时是否自动提交事务。如果为false,则会回滚未提交的事务,如果为true,则会自动提交事务。default : false(不建议使用)

c3p0.autoCommitOnClose=false

#c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能 通过多线程实现多个操作同时被执行。Default: 3
c3p0.numHelperThreads=10

二、Druid

配置 缺省值

说明

name  

配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 

如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this)

jdbcUrl  

连接数据库的url,不同数据库不一样。例如: 

mysql : jdbc:mysql://10.20.153.104:3306/druid2 

oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto

username  

连接数据库的用户名

password  

连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

driverClassName 根据url自动识别

这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)

initialSize 0

初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时

maxActive 8

最大连接池数量

maxIdle 8

已经不再使用,配置了也没效果

minIdle  

最小连接池数量

maxWait  

获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。

poolPreparedStatements false

是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。

maxOpenPreparedStatements -1

要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100

validationQuery  

用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。

testOnBorrow true

申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能

testOnReturn false

归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能

testWhileIdle false

建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

timeBetweenEvictionRunsMillis  

有两个含义: 

1) Destroy线程会检测连接的间隔时间

2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明

numTestsPerEvictionRun  

不再使用,一个DruidDataSource只支持一个EvictionRun

minEvictableIdleTimeMillis  
connectionInitSqls  

物理连接初始化的时候执行的sql

exceptionSorter 根据dbType自动识别

当数据库抛出一些不可恢复的异常时,抛弃连接

filters  

属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 

监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall

proxyFilters  

类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系

原文地址:https://www.cnblogs.com/a591378955/p/8074372.html