From 7c2c2ebb1bb632e708399712d6f5e069e11998a4 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 2 May 2023 15:44:38 +0100 Subject: [PATCH] Make ApplicationAvailabilityBean receive events with lazy init Fixes gh-35161 --- .../ApplicationAvailabilityAutoConfiguration.java | 4 ++-- ...pplicationAvailabilityAutoConfigurationTests.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.java index 769c5a3cc8..e9e19df7f0 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.java @@ -34,8 +34,8 @@ import org.springframework.context.annotation.Bean; public class ApplicationAvailabilityAutoConfiguration { @Bean - @ConditionalOnMissingBean - public ApplicationAvailability applicationAvailability() { + @ConditionalOnMissingBean(ApplicationAvailability.class) + public ApplicationAvailabilityBean applicationAvailability() { return new ApplicationAvailabilityBean(); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfigurationTests.java index 225ce98f5e..c18b0bd01d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfigurationTests.java @@ -18,8 +18,11 @@ package org.springframework.boot.autoconfigure.availability; import org.junit.jupiter.api.Test; +import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.availability.ApplicationAvailability; +import org.springframework.boot.availability.AvailabilityChangeEvent; +import org.springframework.boot.availability.ReadinessState; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -51,4 +54,13 @@ class ApplicationAvailabilityAutoConfigurationTests { .hasBean("customApplicationAvailability"))); } + @Test + void whenLazyInitializationIsEnabledApplicationAvailabilityBeanShouldStillReceiveAvailabilityChangeEvents() { + this.contextRunner.withBean(LazyInitializationBeanFactoryPostProcessor.class).run((context) -> { + AvailabilityChangeEvent.publish(context, ReadinessState.ACCEPTING_TRAFFIC); + ApplicationAvailability applicationAvailability = context.getBean(ApplicationAvailability.class); + assertThat(applicationAvailability.getLastChangeEvent(ReadinessState.class)).isNotNull(); + }); + } + }