我已经将BreakAfterAcquireFailure设置为true,MaxIdleTime和MaxConnectionAge的值为10 (非常小).Like如下:
ComboPooledDataSource ds = new ComboPooledDataSource(db);
ds.setAcquireRetryAttempts(3);
ds.setBreakAfterAcquireFailure(true);
ds.setMaxIdleTime(10);
ds.setMaxConnectionAge(10);
ds.setMaxPoolSize(2);
ds.setMinPoolSize(1);
ds.setTestConnectionOnCheckin(false);
ds.setIdleConnectionTestPeriod(10);
ds.setPreferredTestQuery("select 1");
为什么ComboPooledDataSource.getConnection()总是在重新启动mysql很长时间之后抛出异常。
有谁能帮帮我呢?非常感谢。
发布于 2013-12-06 00:17:14
breakAfterAcquireFailure
手段确切地说,c3p0不会尝试从dbms中断中恢复。如果设置了breakAfterAcquireFailure
,如果发现无法获得新的连接,则DataSource只会标记自己已断开,并且再也不会尝试。如果您希望您的DataSource从外部恢复,则保留该参数的默认值false
。
对于maxIdleTime
和maxConnectionAge
,您不需要这么小的值。那太可怕了。如果您依赖于空闲连接测试,最好也将testConnectionOnCheckin
设置为true
。10秒可能比idleConnectionTestPeriod
所需要的更有侵略性。考虑到你的泳池大小,我想你只是在测试/玩这个。(对于大多数用途来说,2的maxPoolSize
太小了。)
https://stackoverflow.com/questions/20417533
复制