mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-24 10:19:03 +00:00
Use GracefulHandler for graceful shutdown of Jetty
See gh-51128 Signed-off-by: Alessio Attilio <309061723+alessio-attilio@users.noreply.github.com>
This commit is contained in:
committed by
Stéphane Nicoll
parent
ccf6767e00
commit
12eeed09fe
+10
-10
@@ -31,7 +31,7 @@ import org.eclipse.jetty.server.Handler;
|
||||
import org.eclipse.jetty.server.NetworkConnector;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||
import org.eclipse.jetty.server.handler.StatisticsHandler;
|
||||
import org.eclipse.jetty.server.handler.GracefulHandler;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.boot.jetty.reactive.JettyReactiveWebServerFactory;
|
||||
@@ -94,23 +94,23 @@ public class JettyWebServer implements WebServer {
|
||||
}
|
||||
|
||||
private @Nullable GracefulShutdown createGracefulShutdown(Server server) {
|
||||
StatisticsHandler statisticsHandler = findStatisticsHandler(server);
|
||||
if (statisticsHandler == null) {
|
||||
GracefulHandler gracefulHandler = findGracefulHandler(server);
|
||||
if (gracefulHandler == null) {
|
||||
return null;
|
||||
}
|
||||
return new GracefulShutdown(server, statisticsHandler::getRequestsActive);
|
||||
return new GracefulShutdown(server, () -> (int) (gracefulHandler.getCurrentRequestCount() + gracefulHandler.getCurrentStreamWrapperCount()));
|
||||
}
|
||||
|
||||
private @Nullable StatisticsHandler findStatisticsHandler(Server server) {
|
||||
return findStatisticsHandler(server.getHandler());
|
||||
private @Nullable GracefulHandler findGracefulHandler(Server server) {
|
||||
return findGracefulHandler(server.getHandler());
|
||||
}
|
||||
|
||||
private @Nullable StatisticsHandler findStatisticsHandler(Handler handler) {
|
||||
if (handler instanceof StatisticsHandler statisticsHandler) {
|
||||
return statisticsHandler;
|
||||
private @Nullable GracefulHandler findGracefulHandler(Handler handler) {
|
||||
if (handler instanceof GracefulHandler gracefulHandler) {
|
||||
return gracefulHandler;
|
||||
}
|
||||
if (handler instanceof Handler.Wrapper handlerWrapper) {
|
||||
return findStatisticsHandler(handlerWrapper.getHandler());
|
||||
return findGracefulHandler(handlerWrapper.getHandler());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+4
-4
@@ -24,7 +24,7 @@ import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.ee11.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.server.NetworkConnectionLimit;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.handler.StatisticsHandler;
|
||||
import org.eclipse.jetty.server.handler.GracefulHandler;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.boot.jetty.ConfigurableJettyWebServerFactory;
|
||||
@@ -121,9 +121,9 @@ public class JettyReactiveWebServerFactory extends JettyWebServerFactory
|
||||
new ForwardHeadersCustomizer().customize(server);
|
||||
}
|
||||
if (getShutdown() == Shutdown.GRACEFUL) {
|
||||
StatisticsHandler statisticsHandler = new StatisticsHandler();
|
||||
statisticsHandler.setHandler(server.getHandler());
|
||||
server.setHandler(statisticsHandler);
|
||||
GracefulHandler gracefulHandler = new GracefulHandler();
|
||||
gracefulHandler.setHandler(server.getHandler());
|
||||
server.setHandler(gracefulHandler);
|
||||
}
|
||||
return server;
|
||||
}
|
||||
|
||||
+4
-4
@@ -58,7 +58,7 @@ import org.eclipse.jetty.server.NetworkConnectionLimit;
|
||||
import org.eclipse.jetty.server.Request;
|
||||
import org.eclipse.jetty.server.Response;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.handler.StatisticsHandler;
|
||||
import org.eclipse.jetty.server.handler.GracefulHandler;
|
||||
import org.eclipse.jetty.session.DefaultSessionCache;
|
||||
import org.eclipse.jetty.session.FileSessionDataStore;
|
||||
import org.eclipse.jetty.session.SessionConfig;
|
||||
@@ -180,9 +180,9 @@ public class JettyServletWebServerFactory extends JettyWebServerFactory
|
||||
new ForwardHeadersCustomizer().customize(server);
|
||||
}
|
||||
if (getShutdown() == Shutdown.GRACEFUL) {
|
||||
StatisticsHandler statisticsHandler = new StatisticsHandler();
|
||||
statisticsHandler.setHandler(server.getHandler());
|
||||
server.setHandler(statisticsHandler);
|
||||
GracefulHandler gracefulHandler = new GracefulHandler();
|
||||
gracefulHandler.setHandler(server.getHandler());
|
||||
server.setHandler(gracefulHandler);
|
||||
}
|
||||
return getJettyWebServer(server);
|
||||
}
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ package org.springframework.boot.jetty.autoconfigure.reactive;
|
||||
import jakarta.websocket.server.ServerContainer;
|
||||
import org.eclipse.jetty.ee11.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.server.handler.StatisticsHandler;
|
||||
import org.eclipse.jetty.server.handler.GracefulHandler;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.jetty.JettyServerCustomizer;
|
||||
@@ -77,7 +77,7 @@ class JettyReactiveWebServerAutoConfigurationTests extends AbstractReactiveWebSe
|
||||
WebServer webServer = ((ReactiveWebServerApplicationContext) context.getSourceApplicationContext())
|
||||
.getWebServer();
|
||||
assertThat(webServer).isNotNull();
|
||||
ServletContextHandler servletContextHandler = (ServletContextHandler) ((StatisticsHandler) ((JettyWebServer) webServer)
|
||||
ServletContextHandler servletContextHandler = (ServletContextHandler) ((GracefulHandler) ((JettyWebServer) webServer)
|
||||
.getServer()
|
||||
.getHandler()).getHandler();
|
||||
Object serverContainer = servletContextHandler.getContext()
|
||||
|
||||
Reference in New Issue
Block a user