About
SpringBootアプリが、ログに、「Application availability state ReadinessState changed from ACCEPTING_TRAFFIC to REFUSING_TRAFFIC」と残してダウンしてしまう時の対処について。
事象について
私の場合は、ScooldというStackOverflow clone アプリを動かしていた際におこりました、SpringBoot version は、2.5.2 です。
起動後しばらくすると、ログに以下が表示されます。
2022-01-20 19:47:51,025 [DEBUG] o.s.b.a.ApplicationAvailabilityBean - Application availability state ReadinessState changed from ACCEPTIN
G_TRAFFIC to REFUSING_TRAFFIC
...
2022-01-20 19:47:51,032 [DEBUG] o.s.c.s.DefaultLifecycleProcessor - Bean 'webServerGracefulShutdown' completed its stop procedure
ここらへんの情報、
https://www.baeldung.com/spring-liveness-readiness-probes
によると、Spring2.3から、Kubernetes環境下で、グレースフルにアプリを終了する機能が追加されているようです。
ぱっと見、KubernetesのヘルスチェックによりPodが再起動されて、アプリが再起動される時に安全に再起動ができるようにしてくれるようです。
この機能は、上記記事の以下記述から、SpringBootが必要と判断する場合に有効化するようですが、
We'll usually let Spring Boot decide when to stand up these probes for us. But, if we want to, we can enable them manually in our application.properties.
私の実行環境(Sakura VPS)、または、アプリの構成? では不必要に有効化されてしまっているようです。
解決策
BootによりKubernetes用の設定がKubernetes環境以外で設定される場合があるようなので、以下の設定を追加し、マニュアルで機能を停止することで、アプリのシャットダウンが解消されました。
management.health.probes.enabled=false