Java 关闭弹簧挂钩

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;

我正试图通过SpringGradle应用程序中的
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谢谢,似乎优雅的退出才是问题所在。我将在我的问题中添加有关我的环境的详细信息,如果您将评论作为答案提交,我会将其标记为已回答。