LoginSignup
1
1

More than 5 years have passed since last update.

BoneCPによるコネクション取得時のリトライ設定

Posted at

はじめに

某プロダクトが内部でBoneCPを使用しているのですが、ごくたまにプロダクトの再起動時にJDBCコネクションの取得に失敗してしまうことがあったため、BoneCP側で自動リトライができないか調べてみました。

なお、新規にBoneCPを使おうと考えている方は、現在はHikariCPを検討した方がよいです。BoneCPの作者自身もBoneCPは今は非推奨でHikariCPをすすめています。

確認したバージョン

BoneCP 0.7.1.RELEASE

関係するBoneCPのオプション

結論から言うと、下記のBoneCPのオプションが関係してきます。

項目 設定値の型 説明
acquireRetryAttempts int型 リトライ回数を設定する。
acquireRetryDelayInMs long型 接続失敗後の次のリトライ実行までの待機時間をミリ秒で設定する。
lazyInit boolean型 trueに設定すると、アプリケーションからgetConnectionするまでプールは空で初期化する。デフォルトはfalseとなっており、BoneCPの初期化処理で最初にgetConnectionを行う

最初の2つのオプションを設定するだけで一見よさそうに見えますが、ポイントは最後のlazyInitオプションです。これをtrueに設定しないと、BoneCPの初期化時にgetConnectionで接続エラーになってもリトライされません。acquireRetryAttemptsacquireRetryDelayInMsの設定は無視されますソースを見れば一目瞭然で、初期化時の最初のgetConnection時はハードコードでこの2つの設定値を0に設定しています

幸いにも、lazyInittrueに設定することでBoneCP初期化時のgetConnectionをスキップすることができます。これにより、1発目のgetConnectionもリトライ対象にすることができるわけです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1