diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index 326bbdd2751..b9bba8ca0bc 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -329,14 +329,6 @@ public class SpringApplication { // Create, load, refresh and run the ApplicationContext context = createApplicationContext(); - if (this.registerShutdownHook) { - try { - context.registerShutdownHook(); - } - catch (AccessControlException ex) { - // Not allowed in some environments. - } - } context.setEnvironment(environment); postProcessApplicationContext(context); applyInitializers(context); @@ -358,6 +350,14 @@ public class SpringApplication { // Refresh the context refresh(context); + if (this.registerShutdownHook) { + try { + context.registerShutdownHook(); + } + catch (AccessControlException ex) { + // Not allowed in some environments. + } + } afterRefresh(context, applicationArguments); listeners.finished(context, null); return context; diff --git a/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java b/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java index 27f3966eb76..9704a983cac 100644 --- a/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/SimpleMainTests.java @@ -76,7 +76,8 @@ public class SimpleMainTests { private String[] getArgs(String... args) { List list = new ArrayList(Arrays.asList( - "--spring.main.webEnvironment=false", "--spring.main.showBanner=false")); + "--spring.main.webEnvironment=false", "--spring.main.showBanner=false", + "--spring.main.registerShutdownHook=false")); if (args.length > 0) { list.add("--spring.main.sources=" + StringUtils.arrayToCommaDelimitedString(args)); diff --git a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index 6f4eacc7d2e..875d9f478e1 100644 --- a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -673,6 +673,11 @@ public class SpringApplicationTests { return this.applicationContext; } + @Override + public void close() { + this.applicationContext.close(); + } + } private static class TestSpringApplication extends SpringApplication { diff --git a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java index d33357f14a5..f54901f9d12 100644 --- a/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/builder/SpringApplicationBuilderTests.java @@ -310,5 +310,16 @@ public class SpringApplicationBuilderTests { public boolean getRegisteredShutdownHook() { return this.registeredShutdownHook; } + + @Override + public void close() { + super.close(); + this.applicationContext.close(); + } + + @Override + public ApplicationContext getParent() { + return this.applicationContext.getParent(); + } } }