Spring Boot shutdown端点调用此类:org.springframework.boot.actuate.endpoint.ShutdownEndpoint
,它在ApplicationContext
上调用close()
。这反过来...
- 破坏豆
- 关闭bean工厂
- 停止嵌入式servlet容器
如果豆类是有序的,并已精心编写的关闭方法那么这应该是精细。但是,如果没有,那么在该关机周期的某个时刻,“3个客户正在运行的作业”可能会被中断。此外,它是可能的新的连接可能会在你调用关机和停机循环踢。
Spring提供了应用程序事件和事件监听钩子,让你参加关机周期之间的小时间窗口中进行。该ContextClosedEvent
发表以前豆被破坏,嵌入式集装箱关机等,所以你可以使用这个默认的行为踢之前实现自己的关闭行为,例如:
public class ShutdownListener implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
//
}
}
您可以实现这个监听器使得它
- 暂停(如果你不与HTTP请求处理或东西相当于),以允许任何进行中的工作完成后再继续
- 不合格品的连接请求用HTTP 503与关机周期
您注册此侦听器的方式与您在Spring Boot中注册任何ApplicationListener的方式相同,例如:
SpringApplicatiom app = new SpringApplication(MyApplication.class);
app.addListeners(new ShutdownListener());
“破豆”是什么意思? –
@JoseMartinez这意味着关闭它们或丢弃它们。使用术语“销毁”是因为Spring允许你定义一个'destroy-method',它将保证在应用程序上下文关闭时代表你调用。 – glytching
如何以编程方式拒绝所有连接? –