2012-11-30 22 views
4

我有一个BoneCP(0.7.1 RELEASE)的问题。我虽然BoneCP.getConnection()确保它会返回Connection对象,假设数据库是活着的。BoneCP不能从断开的连接中恢复

这里是我的代码配置我的游泳池

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); 

尝试运行此查询抛出SQLException与国家08S01(通信链路故障) 。

随后调用this.connectionPool.getConnection()会返回良好的连接。

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

回答

4
  1. 它应该捕获08S01并清除池中的所有连接。但是,如果您有多个线程,则可能有一个线程已检出可能失败的连接(其余连接应再次变为OK)。

  2. 请试用0.8.0-beta3-SNAPSHOT;我最近清理了这个实现,并添加了一些稳健性测试,测试了各种场景,其中包括08S01。

+0

谢谢!我的示例应用程序是单线程的。我在哪里可以下载预编译jar?网站上只有0.7.1。 – expert

+1

此处:https://oss.sonatype.org/content/repositories/snapshots/com/jolbox/bonecp/0.8.0-beta3-SNAPSHOT/ – wwadge

+1

(0.8.0-beta4,非快照版本,即将推出在maven中央) – wwadge