4

BoneCP (0.7.1 RELEASE) に問題があります。私はBoneCP.getConnection()、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);

このクエリを実行しようとするSQLExceptionと、状態がスローされます08S01(通信リンク障害)。

への後続の呼び出しは、this.connectionPool.getConnection()良好な接続を返します。

しかし、接続が失われた場合に自分で処理する必要がないように、接続プールの全体的なポイントではありませんか?

4

1 に答える 1

4
  1. 08S01 をキャプチャし、プール内のすべての接続を消去する必要があります。ただし、複数のスレッドがある場合は、失敗する可能性のある接続を既にチェックアウトしているスレッドがある可能性があります (残りの接続は再び正常になるはずです)。

  2. 0.8.0-beta3-SNAPSHOT を試してみてください。私はごく最近、その実装をクリーンアップし、08S01 などのさまざまなシナリオをテストする一連の堅牢性テストを追加しました。

于 2012-11-30T21:28:56.783 に答える