目标:使用嵌入式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