diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java index bb6081899c11..6f3c133aa5f9 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplicationRunListeners.java @@ -103,7 +103,8 @@ private void callFailedListener(SpringApplicationRunListener listener, Configura } private void doWithListeners(String stepName, Consumer listenerAction) { - doWithListeners(stepName, listenerAction, StartupStep::end); + doWithListeners(stepName, listenerAction, (step) -> { + }); } private void doWithListeners(String stepName, Consumer listenerAction, @@ -111,6 +112,7 @@ private void doWithListeners(String stepName, Consumer>any())).willReturn(startupStep); + SpringApplication application = new SpringApplication(BrokenPostConstructConfig.class); + application.setWebApplicationType(WebApplicationType.NONE); + application.setApplicationStartup(applicationStartup); + assertThatExceptionOfType(BeanCreationException.class).isThrownBy(application::run); + + verify(applicationStartup).start("spring.boot.application.starting"); + verify(applicationStartup).start("spring.boot.application.environment-prepared"); + verify(applicationStartup).start("spring.boot.application.failed"); + + long startCount = mockingDetails(applicationStartup).getInvocations().stream() + .filter((invocation) -> invocation.getMethod().toString().contains("start(")).count(); + long endCount = mockingDetails(startupStep).getInvocations().stream() + .filter((invocation) -> invocation.getMethod().toString().contains("end(")).count(); + assertThat(startCount).isEqualTo(endCount); + } + private ArgumentMatcher isAvailabilityChangeEventWithState( S state) { return (argument) -> (argument instanceof AvailabilityChangeEvent)