一、几个参数详解
(1)breakAfterAcquireFailure
如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。
如果设为false,获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。
(2)testConnectionOnCheckin
如果设为true,那么在取得连接的同时将校验连接的有效性。性能消耗大。
(3)idleConnectionTestPeriod
每X秒检查所有连接池中的空闲连接。
二、application.xml文件中的c3p0配置
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="automaticTestTable" value="CONNECTION_TEST" /> <property name="testConnectionOnCheckout" value="true" /> <property name="acquireRetryAttempts" value="5" /> <property name="driverClass"> <value>${CHECK_ST_ORL_driverClassName}</value> </property> <property name="jdbcUrl"> <value>${CHECK_ST_ORL_URL}</value> </property> <property name="user"> <value>${CHECK_ST_ORL_USER}</value> </property> <property name="password"> <value>${CHECK_ST_ORL_PASSWD}</value> </property> <property name="minPoolSize"> <value>30</value> </property> <property name="maxPoolSize"> <value>100</value> </property> <property name="initialPoolSize"> <value>30</value> </property> <property name="maxConnectionAge"> <value>1800</value> </property> <property name="maxIdleTime"> <value>1800</value> </property> <property name="maxIdleTimeExcessConnections"> <value>300</value> </property> <property name="maxStatements"> <value>0</value> </property> <property name="testConnectionOnCheckin"> <value>false</value> </property> <property name="idleConnectionTestPeriod"> <value>60</value> </property> <property name="checkoutTimeout"> <value>1000</value> </property> <property name="breakAfterAcquireFailure"> <value>false</value> </property> </bean>
三、测试详情
breakAfterAcquireFailure | testConnectionOnCheckin | idleConnectionTestPeriod | oracle | mysql |
false | false | 900 | x | v |
true | false | 900 | x | v |
false | true | 900 | v | v |
true | true | 900 | x | v |
false | false | 60 | v | v |
true | false | 60 | x | x |
false | true | 60 | v | v |
true | true | 60 | x | x |
四、结论
breakAfterAcquireFailure设为false
testConnectionOnCheckin 设为false
idleConnectionTestPeriod 设为60