AnnotationConfigApplicationContext
を使用して、春のフレームワークベースのアプリケーションを作成しました。@PostConstructと@Retryableを一緒に使用できないのはなぜですか?
1つのBeanには、外部サービスへの接続を作成するinitメソッドがあります。これは、動作するbeanが開始されると自動的に実行されるように@PostConstruct
と注釈することができます。
この接続を作成する際に例外を処理するには、例外がキャッチされた場合にinitメソッドが最大5回再試行するようにします。 @PostConstruct
と@Retryable
の両方でメソッドに注釈を付けると、例外が1回スローされ、プログラムが終了することがわかります。@Retryable
は効果がありません。
私は@Configuration
と一緒に正しく構成クラスに@EnableRetry
を使用しました。このメソッドがBeanがインスタンス化された後に呼び出された場合、再試行可能と注釈された同じBeanに別のメソッドBを作成しました。メソッドが再試行されたことがわかります/例外がスローされたときに期待通りに動作します。
なぜこれがうまくいかないのか何かが関連しているか、spring-retry要素が接続される前にpostconstructが起こっていると思いますか?
実際には、例外を処理し、注釈を使用して再試行可能な初期化メソッドを持つ方が良いですか?メソッドでプログラムで試してみるのではなく、
編集:外部サービスへの接続の作成を@Postconstruct
で行うべきではないと私は同意します。これは、再試行が失敗し、有害な影響を及ぼす可能性がある場合、コンテキスト全体を初期化から停止させる可能性があります。
しかし、これは、Spring Frameworkのどの部分がこれらの2つの注釈を連動させないのかという疑問にはまだ答えていません。
この投稿はよく分かりますhttps://stackoverflow.com/a/41856170/3309466 –