如何通过 start-stop-daemon 优雅地关闭 Spring 引导应用程序
How to gracefuly shutdown a Spring Boot application by start-stop-daemon
我们有一个多线程 Spring 引导应用程序,它作为守护进程在 Linux 机器上运行。当我尝试像这样通过 start-stop-daemon 停止应用程序时
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
发送 SIGTERM 信号,应用程序立即结束。但是我希望应用程序等待,直到每个线程都完成它的工作。
有什么办法,如何管理收到 SIGTERM 信号时发生的事情?
Spring 引导应用程序向 JVM 注册一个关闭挂钩,以确保 ApplicationContext
在退出时正常关闭。创建实现 DisposableBean
或具有带有 @PreDestroy
注释的方法的 bean(或 bean)。此 bean 将在应用程序关闭时调用。
@Evgeny 提到的示例
@SpringBootApplication
@Slf4j
public class SpringBootShutdownHookApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootShutdownHookApplication.class, args);
}
@PreDestroy
public void onExit() {
log.info("###STOPing###");
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
log.error("", e);;
}
log.info("###STOP FROM THE LIFECYCLE###");
}
}
我们有一个多线程 Spring 引导应用程序,它作为守护进程在 Linux 机器上运行。当我尝试像这样通过 start-stop-daemon 停止应用程序时
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
发送 SIGTERM 信号,应用程序立即结束。但是我希望应用程序等待,直到每个线程都完成它的工作。
有什么办法,如何管理收到 SIGTERM 信号时发生的事情?
Spring 引导应用程序向 JVM 注册一个关闭挂钩,以确保 ApplicationContext
在退出时正常关闭。创建实现 DisposableBean
或具有带有 @PreDestroy
注释的方法的 bean(或 bean)。此 bean 将在应用程序关闭时调用。
@Evgeny 提到的示例
@SpringBootApplication
@Slf4j
public class SpringBootShutdownHookApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootShutdownHookApplication.class, args);
}
@PreDestroy
public void onExit() {
log.info("###STOPing###");
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
log.error("", e);;
}
log.info("###STOP FROM THE LIFECYCLE###");
}
}