2016-04-18 14 views
6

Linuxマシン上でデーモンとして動作するマルチスレッドのSpringブートアプリケーションがあります。start-stop-daemonによるSpringブートアプリケーションのgracefulyシャットダウン方法

start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME 

SIGTERM信号が送信され、アプリケーションが終了すると、アプリケーションが停止します。しかし、すべてのスレッドが処理を終えるまで、アプリケーションを待機させたい。

SIGTERM信号を受信したときに何が起こるかを管理する方法はありますか?

+0

あなたは優雅に埋め込まれたサーブレットコンテナをシャットダウンするに興味があるなら、[この春ブート問題]を参照してください。(https://github.com/spring-projects/spring-boot/issues/4657 )。 –

答えて

13

Springブートアプリケーションは、終了時にApplicationContextが正常に閉じられるように、シャットダウンフックをJVMに登録します。 DisposableBeanを実装するか、@PreDestroyアノテーションを持つメソッドを持つBean(またはBean)を作成します。このBeanは、アプリケーションのシャットダウン時に呼び出されます。

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-application-exit

+1

チップをありがとう。しかし、これは私の問題を解決するものではありません。なぜなら、何とかSIGTERM信号を傍受し、アプリケーションが終了するまで待つ必要があるからです。これにより私はいくつかのクリーンアップを行うことができますが、正しく理解すれば、現在実行中のメソッドの終了を防ぐことができません。 – Michal

+0

@Michalあなたが正しいです、それはあなたが終了を防ぐことを許可しません。しかし、それはスレッドをロジックを停止させて実装し、スレッドが終了するまで待つことができます。シャットダウンフックが動作する場合、JVMは終了しません。 – Evgeny

+0

私はあなたにプラス2を与えたいと思いますが、私は1を与えることしかできません。 –

関連する問題