Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring引导执行器安全关闭rest服务器?_Java_Spring_Rest_Spring Mvc_Spring Boot - Fatal编程技术网

Java 使用Spring引导执行器安全关闭rest服务器?

Java 使用Spring引导执行器安全关闭rest服务器?,java,spring,rest,spring-mvc,spring-boot,Java,Spring,Rest,Spring Mvc,Spring Boot,这是我们的后续问题 假设我们有一个服务器,当前连接了3个客户端,每个客户端都在运行一个长作业。然后使用以下命令关闭服务器: curl -X POST localhost:port/shutdown 是否: A) 让服务器在关闭前完成3个客户端正在运行的作业 B) 禁止发生任何其他连接,使服务器最终关闭?Spring Boot shutdown端点调用此类:org.springframework.Boot.actuate.endpoint.ShutdownEndpoint,该类调用应用程序上下文

这是我们的后续问题

假设我们有一个服务器,当前连接了3个客户端,每个客户端都在运行一个长作业。然后使用以下命令关闭服务器:

curl -X POST localhost:port/shutdown
是否:

A) 让服务器在关闭前完成3个客户端正在运行的作业


B) 禁止发生任何其他连接,使服务器最终关闭?

Spring Boot shutdown端点调用此类:
org.springframework.Boot.actuate.endpoint.ShutdownEndpoint
,该类调用
应用程序上下文上的
close()
。这反过来

  • 破坏豆子
  • 关闭豆子工厂
  • 停止嵌入式servlet容器
如果您的bean已经订购,并且已经仔细编写了关闭方法,那么这应该是很好的。但如果没有,那么在关闭周期的某个时刻,“3个客户端正在运行的作业”可能会被中断。此外,在调用shutdown和启动shutdown循环之间的小时间窗口中,可能会建立新的连接

Spring提供应用程序事件和侦听器挂钩,允许您参与关闭周期。
ContextClosedEvent
是在bean被销毁、嵌入式容器被关闭等之前发布的,因此您可以使用它在默认行为生效之前实现自己的关闭行为。例如:

public class ShutdownListener implements ApplicationListener<ContextClosedEvent> {
    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        // 
    }
}

“销毁豆子”是什么意思?@JoseMartinez它的意思是关闭或丢弃豆子。之所以使用术语“destroy”,是因为Spring允许您定义一个
destroy方法
,它保证在应用程序上下文关闭时代表您调用该方法。如何通过编程拒绝所有连接?
SpringApplication app = new SpringApplication(MyApplication.class);
app.addListeners(new ShutdownListener());