Java 关闭弹簧挂钩
我正试图通过SpringGradle应用程序中的Java 关闭弹簧挂钩,java,spring,shutdown-hook,Java,Spring,Shutdown Hook,我正试图通过SpringGradle应用程序中的Runtime.getRuntime().addShutdownHook()添加一个关闭钩子 我尝试从中向Application.java类添加一个匿名线程子类,使其看起来像这样: package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
Runtime.getRuntime().addShutdownHook()
添加一个关闭钩子
我尝试从中向Application.java类添加一个匿名线程子类,使其看起来像这样:
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
Thread thread = new Thread() {
public void run() {
System.out.println("Shutdown Thread!");
}
};
Runtime.getRuntime().addShutdownHook(thread);
SpringApplication.run(Application.class, args);
}
}
但是,我没有看到期望的行为:退出应用程序时打印“shutdownthread!”。这里出了什么问题
编辑:我一直在运行它的终端上使用
control+c
关闭它。我正在OSX终端上运行它相关:如何退出应用程序?我只是在终端中控制它。我会加进去的。我需要更优雅的关机吗?@efong5ctrl+C应该调用关机挂钩。在Linux上检查了您的代码,消息已打印,因此我无法复制该问题。你绝对肯定,它没有打印出来吗?可能存在缓冲问题,请尝试使用System.out.flush()
显式刷新输出。也许您的控制台在ctrl+c上发送了一个JVM强制终止信号(kill-9),值得尝试更优雅地关闭JVM,例如SpringApplication.exit
,或System.exit()
@helospark谢谢,似乎优雅的退出才是问题所在。我会在我的问题中添加有关我的环境的详细信息,如果你提交评论作为答案,我会将其标记为已回答。相关:如何退出应用程序?我只是在终端中控制它。我会加进去的。我需要更优雅的关机吗?@efong5ctrl+C应该调用关机挂钩。在Linux上检查了您的代码,消息已打印,因此我无法复制该问题。你绝对肯定,它没有打印出来吗?可能存在缓冲问题,请尝试使用System.out.flush()
显式刷新输出。也许您的控制台在ctrl+c上发送了一个JVM强制终止信号(kill-9),值得尝试更优雅地关闭JVM,例如SpringApplication.exit
,或System.exit()
@helospark谢谢,似乎优雅的退出才是问题所在。我将在我的问题中添加有关我的环境的详细信息,如果您将评论作为答案提交,我会将其标记为已回答。