2016-04-18 4 views
6

У нас есть многопоточное приложение Spring Boot, которое работает на Linux-машине в качестве демона. Когда я пытаюсь остановить приложение на старт-стоп-демон, как этотКак изящно закрыть приложение Spring Boot от start-stop-daemon

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

Сигнал SIGTERM посылается и применение immetiately заканчивается. Однако я хочу, чтобы приложение подождало, пока каждый поток не завершит работу.

Есть ли способ, как управлять тем, что происходит, когда сигнал SIGTERM получен?

+0

Если вы заинтересованы в закрытии встроенный контейнер сервлетов корректно, пожалуйста, см [этой весной Загрузочный выпуск] (https://github.com/spring-projects/spring-boot/issues/4657). –

ответ

13

Приложение Spring Boot регистрирует крюк отключения с помощью JVM, чтобы гарантировать, что будет закрыт грациозно при выходе. Создайте bean (или bean), который реализует DisposableBean или имеет метод с аннотацией @PreDestroy. Этот компонент будет вызываться при отключении приложения.

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 ... –

 Смежные вопросы

  • Нет связанных вопросов^_^