エラーの原因を分かりやすく表示するには、Java Config @Bean メソッドでチェック済み例外とチェックなし例外をどのように処理すればよいですか?[重複]
-
20-12-2019 - |
質問
私はスプリングブートベースの小さなコマンドラインアプリケーションを開発しています。メインクラスには @Autowired アノテーションが付けられたフィールドがあります @Autowired Repository repository;
その構築レシピは、適切な @Bean アノテーション付きメソッドを持つ Java Config クラスで提供されます。 @Bean Repository repository(){...}
.
@Bean アノテーション付きメソッドには、チェック済み例外と未チェック例外をスローできるコードが含まれています。@Bean Repository repository(){...//exceptions}
私の目標は、長いスタック トレースではなく、適切なログ レベルで短いメッセージをログに記録する、使いやすいアプリケーションを作成することです。
現在、Java Config @Bean アノテーション付きメソッドの例外により、アプリケーションは次のエラーで終了します。 o.s.boot.SpringApplication: Application startup failed
メッセージと非常に長いスタック トレースが表示されます。
Java Config の @Bean アノテーション付きメソッドで少なくとも典型的な例外 (私が知っている) を処理して、トラブルシューティングに役立つユーザーフレンドリーな短いメッセージを記録する良い方法はあるだろうか。
このような戦略では、例外処理コードを Java Config クラスに追加することが想定されると思いますが、公的に利用可能な Java Config クラスでそのようなコードを見たことがありません。これは、Java Config クラスで例外処理コードを使用するのは悪い習慣である可能性があることを示唆しています。
ありがとう。
解決
ここにはいくつかの選択肢があると思いますが、どれが最適かは主に個人の好みとアプリケーションの構造によって決まります。
1 つのオプションは、呼び出し前にすべての入力検証を実行することです。 SpringApplication.run()
. 。これはどのコマンドライン引数でも機能しますが、次のように構成されたものではせいぜい面倒になります。 application.properties
.
から例外をスローするのではなく、 @Bean
メソッドを使用すると、それらをキャッチして適切に処理できます。問題が軽微な場合は、問題を説明する情報または警告メッセージをログに記録し、アプリケーションの続行を許可できます。問題が致命的な場合は、エラー メッセージをログに記録してから、 System.exit()
. 。これにより、実行中にスローされた例外に対するユーザーフレンドリーなエラーレポートが提供されます。 @Bean
メソッドが呼び出されても、その後に発生した例外のスタック トレースが残ります。
最後に、呼び出しをラップすることもできます SpringApplication.run()
try-catch ブロック内。その後、捕捉された例外と一連の原因を調べて、ログに記録する適切なエラー メッセージを決定できます。このアプローチの利点は、原因となる例外に対してわかりやすいエラー メッセージを提供できることです。 SpringApplication.run()
失敗するのは、自分の内側から投げかけられたものだけではありません。 @Bean
方法。
検証するコマンドライン引数があると仮定すると、おそらく 1 番目と 3 番目のオプションを組み合わせて使用することになるでしょう。まず、作業をもう少し簡単にするために、JOpt Simple などの CLI ライブラリを使用します。