From 30de75c75ccbeb4efcd9222df4acb9952b858a89 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 3 Apr 2018 13:49:53 +0100 Subject: [PATCH] Ensure that Jetty is completely stopped when it fails to start Closes gh-12735 --- .../embedded/jetty/JettyEmbeddedServletContainer.java | 4 +++- .../JettyEmbeddedServletContainerFactoryTests.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java index d47ad9a7b7d..fa2d97b2994 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -155,9 +155,11 @@ public class JettyEmbeddedServletContainer implements EmbeddedServletContainer { .info("Jetty started on port(s) " + getActualPortsDescription()); } catch (EmbeddedServletContainerException ex) { + stopSilently(); throw ex; } catch (Exception ex) { + stopSilently(); throw new EmbeddedServletContainerException( "Unable to start embedded Jetty servlet container", ex); } diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java index 58ebaa52a3b..f78c965ac34 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactoryTests.java @@ -357,7 +357,16 @@ public class JettyEmbeddedServletContainerFactoryTests }); this.thrown.expect(EmbeddedServletContainerException.class); - factory.getEmbeddedServletContainer().start(); + JettyEmbeddedServletContainer jettyContainer = (JettyEmbeddedServletContainer) factory + .getEmbeddedServletContainer(); + try { + jettyContainer.start(); + } + finally { + QueuedThreadPool threadPool = (QueuedThreadPool) jettyContainer.getServer() + .getThreadPool(); + assertThat(threadPool.isRunning()).isFalse(); + } } @Test