[Java] SingletonなクラスでExceptionInInitializerError
Databaseから正常に応答が返ってくるかを定期的にチェックし、結果をRedisの特定キーに保持するプログラムを書いたんだが、Databaseが停止しているとConnectionを取得する際に ExceptionInInitializerError
が出てしまう。catch (Exception e)
としていても捕まえられなかったので、ちょっと調べた。
そもそも ExceptionInInitializerError って?
ExceptionInInitializerErrorとは : JavaA2Z
static初期化子内で例外が投げられた場合に投げられる。Errorクラスのサブクラスのため厳密には例外ではない。
なるほど。
今回、Connection取得処理をSingletonなクラスに集約したんだけど、そのSingletonクラスの初期化時に当該エラーが出ている模様。
Exceptionでcatchできなかったのは Errorクラスのサブクラス だからか。
今回の対応
以下のようにすると catch できた。
private void hoge() {
try {
// Singletonなクラスの使用
MySingleton.getInstance().execute();
} catch (Exception | ExceptionInInitializerError e) {
logger.error("エラーだよ", e);
}
}
参考: SingletonとExceptionについて考えてたら、なんだか良く分からなくなってしまいました。 - テツ日記
コメント
コメントを投稿