Spring-bootアプリケーションが停止したときを検出し、以前に何らかのアクションを実行するためのきれいな方法はありますか? CommandLineRunnerの種類は、サービスに事前Spring-bootアプリケーションのアプリケーション停止イベントをキャッチ
答えて
で
感謝を停止するためそれはあなたが何をしたいかによって異なりますが、あなたが行うことができます一つのことはSmartLifecycle
を実装するBeanを持っているとstop
メソッドを実装しています。コンテキストが停止しているときはいつでも、コールバックを取得できます。必ずしもプロセスがシャットダウンしているわけではありません。もしそれが起きたときにコードを起動したいのであれば、Svenがコメントに書いたようにシャットダウンフックを登録したいと思います。
私はこの解決策を考え出しました。あなたが良いものをお持ちであれば、気軽に共有してください。
@Component
public class PortalServiceLifeCycle implements CommandLineRunner {
static final Logger LOGGER = LoggerFactory.getLogger(PortalServiceLifeCycle.class);
@Override
public void run(String... arg0) throws Exception {
LOGGER.info("###START FROM THE LIFECYCLE###");
}
@PreDestroy
public void onExit() {
LOGGER.info("###STOP FROM THE LIFECYCLE###");
}
}
この問題を完全に解決するかどうかは分かりません。私は最近この問題に遭遇し、少し異なる解決策を得ました。
私のSpringブートアプリケーションは、まずTomcatが組み込まれています。 (この問題の2番目の方法は、ウェブの構造に依存しません。私の友人ではありません。)この場合、リスナーを登録してストップイベントをキャッチすることは当然考えられます。私は
@WebListener
public class HelloListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("HelloListener contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("HelloListener contextDestroyed");
}
}
、このようにそれを行うと、同時に、あなたのApplicationクラスに注釈を@ServletComponentScan追加します。
ServletContextListenerを登録するいくつかの方法があります。登録した後は、contextDestroyed関数でstopイベントを取得できます。
しかし、それは私の問題と非常に一致しません。私は春の豆が破壊される前にストップイベントをキャッチする必要があります。ここでは2番目の解決方法があります。
SpringApplication application = new SpringApplication(DemoApplication.class);
application.addListeners(new MyListener());
application.run(args);
とクラスMyListenerのdefination提供:
class MyListener implements ApplicationListener<ContextClosedEvent>{
@Override
public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
// your code here
}
}
注:第二の溶液は、Tomcatや他のWebコンテナとは何の関係もありませんフォローなどのアプリケーションmainメソッドを変更
。 ContextClosedEventはSpringドキュメントには導入されていませんが、ソースで見つかったので、とても便利です。
これが何かを助けることができれば非常にうれしいです。
- 1. クライアント用のアプリケーションの停止
- 2. SpringBootアプリケーションは
- 3. は私Springbootアプリケーション
- 4. カスタムアクションバーが私のアプリケーションを停止する
- 5. springboot app not starting - エラー(停止したo.s.b.c.e.j.JettyEmbeddedWebAppContext)
- 6. 停止イベント
- 7. iOS - アプリケーション外からのUILocalNotificationの停止
- 8. データを含むプリロードSpringbootアプリケーション
- 9. springbootアプリケーションでスレッドを開始
- 10. アプリケーションでウォッチャサービスを停止する
- 11. アプリケーション停止時のタイマキャンセルEJB 3.0
- 12. MediaPlayer停止ボタンがクラッシュするアプリケーション
- 13. PhoneGapフレームワークエラー - アプリケーションが停止しました
- 14. .NET 4.0アプリケーションが停止しました
- 15. Androidアプリケーションの閉鎖/停止を防止する
- 16. アプリケーション全体を一時停止/休止するためのフレームワーク
- 17. アプリケーションを停止するために捕捉するイベントはどれですか?
- 18. Android ADBの停止アプリケーションのコマンド(非ルートデバイスの「強制停止」など)
- 19. Apache Tomcatからアプリケーションをアンデプロイ/停止する前にプロセス/スレッドを停止する
- 20. 点滅イベントを停止
- 21. keypressイベントを停止する
- 22. Websphereアプリケーション・サービスを停止した後にJava.exeが停止しない
- 23. 停止ピストンの誤差がキャッチ
- 24. 1つのアプリケーションを再起動すると、別のアプリケーションnode.jsが停止する
- 25. springbootの環境固有のapplication.propertiesアプリケーション
- 26. SpringBootでの@Componenscanの使用Spring MVCアプリケーション
- 27. javax.swingアプリケーションの例外をキャッチ
- 28. SpringBootアプリケーションをWebsphere 8.5.5.8にデプロイする
- 29. SpringFox SwaggerとSpringbootアプリケーションとの統合
- 30. C#フォーム移動停止イベント
http://docs.spring.io/spring/docs/4.1.6.RELEASE/spring-framework-reference/html/beans.html#beans-java。そこでは、Webアプリケーション以外のアプリケーションでAbstractApplicationContextのregisterShutdownHook()を呼び出すことができます。 –