diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServer.java index 1497c6c086c..6aaffccf10e 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/undertow/UndertowServletWebServer.java @@ -304,6 +304,7 @@ public class UndertowServletWebServer implements WebServer { this.started = false; try { this.manager.stop(); + this.manager.undeploy(); this.undertow.stop(); } catch (Exception ex) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java index 8e50f4e14a2..9d0ee14e847 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java @@ -55,6 +55,8 @@ import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.GenericServlet; import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -1038,6 +1040,17 @@ public abstract class AbstractServletWebServerFactoryTests { assertThat(servletContext.getSessionCookieConfig().getMaxAge()).isEqualTo(60); } + @Test + public void servletContextListenerContextDestroyedIsCalledWhenContainerIsStopped() + throws Exception { + ServletContextListener listener = mock(ServletContextListener.class); + this.webServer = getFactory() + .getWebServer((servletContext) -> servletContext.addListener(listener)); + this.webServer.start(); + this.webServer.stop(); + verify(listener).contextDestroyed(any(ServletContextEvent.class)); + } + protected abstract void addConnector(int port, AbstractServletWebServerFactory factory);