diff --git a/spring-boot/src/main/java/org/springframework/boot/system/ApplicationPidFileWriter.java b/spring-boot/src/main/java/org/springframework/boot/system/ApplicationPidFileWriter.java index 94965061e58..a8ff926b435 100644 --- a/spring-boot/src/main/java/org/springframework/boot/system/ApplicationPidFileWriter.java +++ b/spring-boot/src/main/java/org/springframework/boot/system/ApplicationPidFileWriter.java @@ -30,6 +30,7 @@ import org.springframework.boot.ApplicationPid; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; import org.springframework.boot.context.event.ApplicationPreparedEvent; +import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.SpringApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; @@ -49,7 +50,8 @@ import org.springframework.util.Assert; *

* Note: access to the Spring {@link Environment} is only possible when the * {@link #setTriggerEventType(Class) triggerEventType} is set to - * {@link ApplicationEnvironmentPreparedEvent} or {@link ApplicationPreparedEvent}. + * {@link ApplicationEnvironmentPreparedEvent}, {@link ApplicationReadyEvent}, or + * {@link ApplicationPreparedEvent}. * * @author Jakub Kubrynski * @author Dave Syer @@ -231,6 +233,10 @@ public class ApplicationPidFileWriter return ((ApplicationPreparedEvent) event).getApplicationContext() .getEnvironment(); } + if (event instanceof ApplicationReadyEvent) { + return ((ApplicationReadyEvent) event).getApplicationContext() + .getEnvironment(); + } return null; } diff --git a/spring-boot/src/test/java/org/springframework/boot/system/ApplicationPidFileWriterTests.java b/spring-boot/src/test/java/org/springframework/boot/system/ApplicationPidFileWriterTests.java index 1e4d0af805d..5b6ada3da39 100644 --- a/spring-boot/src/test/java/org/springframework/boot/system/ApplicationPidFileWriterTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/system/ApplicationPidFileWriterTests.java @@ -29,6 +29,7 @@ import org.junit.rules.TemporaryFolder; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; import org.springframework.boot.context.event.ApplicationPreparedEvent; +import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.boot.context.event.SpringApplicationEvent; import org.springframework.context.ConfigurableApplicationContext; @@ -99,7 +100,7 @@ public class ApplicationPidFileWriterTests { } @Test - public void differentEventTypes() throws Exception { + public void tryEnvironmentPreparedEvent() throws Exception { File file = this.temporaryFolder.newFile(); SpringApplicationEvent event = createEnvironmentPreparedEvent("spring.pid.file", file.getAbsolutePath()); @@ -111,6 +112,19 @@ public class ApplicationPidFileWriterTests { assertThat(FileCopyUtils.copyToString(new FileReader(file))).isNotEmpty(); } + @Test + public void tryReadyEvent() throws Exception { + File file = this.temporaryFolder.newFile(); + SpringApplicationEvent event = createReadyEvent("spring.pid.file", + file.getAbsolutePath()); + ApplicationPidFileWriter listener = new ApplicationPidFileWriter(); + listener.onApplicationEvent(event); + assertThat(FileCopyUtils.copyToString(new FileReader(file))).isEmpty(); + listener.setTriggerEventType(ApplicationReadyEvent.class); + listener.onApplicationEvent(event); + assertThat(FileCopyUtils.copyToString(new FileReader(file))).isNotEmpty(); + } + @Test public void withNoEnvironment() throws Exception { File file = this.temporaryFolder.newFile(); @@ -170,6 +184,15 @@ public class ApplicationPidFileWriterTests { context); } + private SpringApplicationEvent createReadyEvent(String propName, String propValue) { + ConfigurableEnvironment environment = createEnvironment(propName, propValue); + ConfigurableApplicationContext context = mock( + ConfigurableApplicationContext.class); + given(context.getEnvironment()).willReturn(environment); + return new ApplicationReadyEvent(new SpringApplication(), new String[] {}, + context); + } + private ConfigurableEnvironment createEnvironment(String propName, String propValue) { MockPropertySource propertySource = mockPropertySource(propName, propValue); ConfigurableEnvironment environment = new StandardEnvironment();