java – BoneCP无法从断开的连接中恢复

我有BoneCP(0.7.1 RELEASE)的问题.我虽然BoneCP.getConnection()确保它会返回Connection对象,假设DB处于活动状态.

这是我配置我的池的方式

private void setupConnectionPool() throws SQLException
{
    // setup the connection pool
    String connectUri = "jdbc:mysql://master-mysql:3306/base?zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&useCompression=true";

    BoneCPConfig config = new BoneCPConfig();
    config.setJdbcUrl(connectUri);
    config.setUsername("dbapp");
    config.setPassword("meh");
    config.setMinConnectionsPerPartition(5);
    config.setMaxConnectionsPerPartition(10);
    config.setPartitionCount(1);
    config.setConnectionTimeoutInMs(5 * 1000);

    this.connectionPool = new BoneCP(config); // setup the connection pool
}

然后我在代码中的某处使用它

    // I'm using Apache DbUtils
    QueryRunner run = new QueryRunner();
    Object result = run.query(this.connectionPool.getConnection(), query, handler, start, limit);

尝试运行此查询会抛出状态为08S01的SQLException(通信链接失败).

对this.connectionPool.getConnection()的后续调用将返回良好的连接.

但是它不是连接池的一个重点,所以我不必自己处理丢失连接的情况吗?

最佳答案
>它应捕获08S01并清除池中的所有连接.但是,如果您有多个线程,则可能有一个已经检出可能失败的连接的线程(其余连接应该再次变为OK).
>请尝试0.8.0-beta3-SNAPSHOT;我最近清理了这个实现,并添加了一系列测试各种场景的稳健性测试,其中包括08S01.

转载注明原文:java – BoneCP无法从断开的连接中恢复 - 代码日志