Ole*_*Ole 4 java rest spring spring-mvc spring-boot
这是如何以正确的方式关闭Spring Boot应用程序的后续问题?
假设我们有一台服务器,当前连接了3个客户端,每个客户端运行时间很长.然后我们使用以下命令关闭服务器:
curl -X POST localhost:port/shutdown
Run Code Online (Sandbox Code Playgroud)
那样做:
A)让服务器在关闭之前完成3个客户端正在运行的作业?
B)禁止发生任何其他连接,以便服务器最终关闭?
Spring Boot关闭端点调用此类:在您的类org.springframework.boot.actuate.endpoint.ShutdownEndpoint上调用.这反过来......close()ApplicationContext
如果您的bean已订购并且已经仔细编写了关闭方法,那么这应该没问题.但如果没有,那么在该关闭周期的某个时刻"3个客户端正在运行的作业"可能会被中断.此外,您可能会在调用关闭和关闭周期之间的小时间窗口中建立新连接.
Spring提供应用程序事件和侦听器挂钩,允许您参与关闭周期.在ContextClosedEvent发布之前,豆类被破坏,嵌入式集装箱关机等,所以你可以使用这个默认的行为踢之前实现自己的关闭行为,例如:
public class ShutdownListener implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
//
}
}
Run Code Online (Sandbox Code Playgroud)
您可以实现此侦听器
您以与在Spring Boot中注册任何ApplicationListener相同的方式注册此侦听器,例如
SpringApplication app = new SpringApplication(MyApplication.class);
app.addListeners(new ShutdownListener());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2766 次 |
| 最近记录: |