diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java index 1bc286c5a54..c05ac2f3ffe 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/ShutdownEndpoint.java @@ -30,6 +30,7 @@ import org.springframework.context.ConfigurableApplicationContext; * * @author Dave Syer * @author Christian Dupuis + * @author Andy Wilkinson */ @ConfigurationProperties(prefix = "endpoints.shutdown") public class ShutdownEndpoint extends AbstractEndpoint> @@ -61,8 +62,7 @@ public class ShutdownEndpoint extends AbstractEndpoint> return SHUTDOWN_MESSAGE; } finally { - new Thread(new Runnable() { - + Thread thread = new Thread(new Runnable() { @Override public void run() { try { @@ -73,8 +73,9 @@ public class ShutdownEndpoint extends AbstractEndpoint> } ShutdownEndpoint.this.context.close(); } - - }).start(); + }); + thread.setContextClassLoader(getClass().getClassLoader()); + thread.start(); } } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java index 77934b34372..ccb9f79c02c 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/ShutdownEndpointTests.java @@ -16,6 +16,9 @@ package org.springframework.boot.actuate.endpoint; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -34,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Phillip Webb * @author Dave Syer + * @author Andy Wilkinson */ public class ShutdownEndpointTests extends AbstractEndpointTests { @@ -50,18 +54,31 @@ public class ShutdownEndpointTests extends AbstractEndpointTests result; + Thread.currentThread().setContextClassLoader( + new URLClassLoader(new URL[0], getClass().getClassLoader())); + try { + result = getEndpointBean().invoke(); + } + finally { + Thread.currentThread().setContextClassLoader(previousTccl); + } + assertThat((String) result.get("message")).startsWith("Shutting down"); assertThat(this.context.isActive()).isTrue(); - assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertThat(config.latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertThat(config.threadContextClassLoader) + .isEqualTo(getClass().getClassLoader()); } @Configuration @EnableConfigurationProperties public static class Config { - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); + + private volatile ClassLoader threadContextClassLoader; @Bean public ShutdownEndpoint endpoint() { @@ -75,6 +92,8 @@ public class ShutdownEndpointTests extends AbstractEndpointTests