目標:使用嵌入式Jetty的Spring Web應用程序,我想關閉/重新啓動應用程序。
這裏的EmbeddedServletContainerFactory
豆(如果需要的話,我會添加省略代碼):Spring + Jetty:優雅的關機
@Bean
public EmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() {
JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
factory.addServerCustomizers(server -> {
server.setStopAtShutdown(false);
/*
* StatisticsHandler has to be added for graceful shutdown to work (see
* https://github.com/eclipse/jetty.project/issues/1549#issuecomment-301102535)
*/
StatisticsHandler statisticsHandler = new StatisticsHandler();
statisticsHandler.setHandler(server.getHandler());
server.setHandler(statisticsHandler);
});
return factory;
}
,這裏是我們的關機信號處理程序:
@Component
public class ShutdownSignalHandler {
@Value("${shutdown.signalType:TERM}")
private String signal;
@Autowired
private ConfigurableApplicationContext context;
@Autowired
private Server jetty;
@PostConstruct
public void init() {
Signal.handle(new Signal(signal), this::signalHandler);
}
private void signalHandler(Signal signal) {
jetty.stop();
context.close();
}
}
問題:具有上述配置,我每次重新啓動時間應用程序通過TERM
信號,我在apache_access
日誌中看到很多503
條目(幾乎所有的都發生了,而jetty.stop
正在執行)。
任何想法如何/爲什麼會發生和決議是什麼?
也許你可以在這裏發佈你的StatisticsHandler-customization? –
@MarkusSchulte我添加了需要修改的部分。這不是特別的。我只是改變了我們想要的東西。只是一個快速的評論:由於處理流程複雜,我沒有試圖擴展它。我複製了整個代碼並更改了實現。 – Rad