我将BreakAfterAcquireFailure设置为true,MaxIdleTime和MaxConnectionAge的值为10(非常小)。如下所示:
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很长一段时间后抛出异常。
谁能帮帮我?非常感谢。
答案 0 :(得分:2)
breakAfterAcquireFailure
means正是c3p0将不尝试从dbms中断中恢复。如果设置了breakAfterAcquireFailure
,则DataSource eill只会在发现无法获取新连接时将其标记为已损坏,并且永远不会再次尝试。如果您希望DataSource从结果中恢复,请将该参数保留为其默认值false
。
您不希望maxIdleTime
和maxConnectionAge
这么小的值。这太可怕了。如果您依赖空闲的连接测试,最好还将testConnectionOnCheckin
设置为true
。 10秒可能比idleConnectionTestPeriod
需要的更激进。鉴于你的游泳池大小参数,我认为你只是测试/玩这个。 (maxPoolSize
of 2对于大多数用途来说太小了。)