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
如何以編程方式拒絕所有連接? –