2016-04-18 12 views
6

Linux makinesinde bir arka plan programı olarak çalışan çok iş parçacıklı bir Spring Boot Uygulaması var. Ben uygulamayı durdurmaya çalıştığınızda başlangıcında-stop-daemon SIGTERM sinyali gönderilir ve uygulama immetiately biter buStart-stop-daemon ile bir Spring Boot uygulamasının kapatılması nasıl yapılır

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

gibi. Ancak, uygulamanın her iş parçacığını bitirene kadar beklemesini istiyorum.

SIGTERM sinyali alındığında ne olacağını yönetmek için herhangi bir yolu var mı?

+0

lütfen bkz [Bu Bahar Boot sorunu] (https://github.com/spring-projects/spring-boot/issues/4657). –

cevap

13

Spring Boot uygulaması, ApplicationContext'un çıkışta incelikle kapatıldığından emin olmak için JVM ile bir kapatma kancası kaydeder. DisposableBean'u uygulayan veya @PreDestroy ek açıklama ile yöntemi olan fasulye (veya fasulye) oluşturun. Bu fasülyenin uygulaması kapatıldığında çağrılacak. Eğer incelikle gömülü servlet kabı kapatılıyor ilgileniyorsanız

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

+1

Bahşiş için teşekkür ederim. Ancak bu benim problemimi çözmüyor, çünkü bir şekilde SIGTERM sinyalini durdurmalı ve uygulama bitene kadar beklemem gerek. Bu, biraz temizlik yapmamı sağlar, ancak doğru anlarsam, şu anda çalışan yöntemin sonlandırılmasını önlememe izin vermez. – Michal

+0

@Michal Haklısınız, fesih engellemenize izin vermez. Ancak, mantığı durduran iplikleri uygulamaya ve iş parçacığı bitene kadar beklemeye yarar. Kapatma kancası çalışıyorsa JVM sonlandırılmayacaktır. – Evgeny

+0

Size bir artı 2 vermek istiyorum, ama sadece 1 ... –