Objectif: Avoir une application Web Spring avec une Jetty intégrée, je voudrais arrêter/redémarrer l'application gracieusement.
Voici le haricot EmbeddedServletContainerFactory
(je vais ajouter le code omis si nécessaire):Spring + Jetty: fermeture gracieuse
@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;
}
et voici notre gestionnaire de signal d'arrêt:
@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();
}
}
Question: ayant la configuration ci-dessus, chaque fois que je remets en marche l'application via TERM
signal, je vois beaucoup de 503
entrées dans apache_access
log (presque tous se produisent pendant que jetty.stop
est en cours d'exécution).
Une idée comment/pourquoi cela arrive et quelle est la résolution?
Peut-être que vous pouvez publier votre personnalisation de StatisticsHandler ici? –
@MarkusSchulte J'ai ajouté la partie à modifier. Ce n'est pas quelque chose de spécial. Je viens de changer la ligne avec ce que nous voulions. Juste un petit commentaire: je n'ai pas essayé de l'étendre à cause du flux de manutention compliqué. J'ai copié l'ensemble du code et modifié l'implémentation. – Rad