Make ApplicationAvailabilityBean receive events with lazy init

Fixes gh-35161
This commit is contained in:
Andy Wilkinson 2023-05-02 15:44:38 +01:00
parent 091d6204cb
commit 7c2c2ebb1b
2 changed files with 14 additions and 2 deletions

View File

@ -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();
}

View File

@ -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();
});
}
}