diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurer.java index 5d41224187..df2bb990d8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurer.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.springframework.aot.AotDetector; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinition; @@ -95,6 +96,9 @@ public class DatabaseInitializationDependencyConfigurer implements ImportBeanDef @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { + if (AotDetector.useGeneratedArtifacts()) { + return; + } InitializerBeanNames initializerBeanNames = detectInitializerBeanNames(beanFactory); if (initializerBeanNames.isEmpty()) { return; diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurerTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurerTests.java index 5bd5b48ec5..9b6eb15ad0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurerTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurerTests.java @@ -169,6 +169,35 @@ class DatabaseInitializationDependencyConfigurerTests { }); } + @Test + void whenInAnAotProcessedContextDependsOnDatabaseInitializationPostProcessorDoesNothing() { + withAotEnabled(() -> { + BeanDefinition alpha = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition(); + BeanDefinition bravo = BeanDefinitionBuilder.rootBeanDefinition(String.class).getBeanDefinition(); + performDetection(Arrays.asList(MockDatabaseInitializerDetector.class, + MockedDependsOnDatabaseInitializationDetector.class), (context) -> { + context.registerBeanDefinition("alpha", alpha); + context.registerBeanDefinition("bravo", bravo); + context.register(DependencyConfigurerConfiguration.class); + context.refresh(); + assertThat(alpha.getAttribute(DatabaseInitializerDetector.class.getName())).isNull(); + assertThat(bravo.getAttribute(DatabaseInitializerDetector.class.getName())).isNull(); + then(MockDatabaseInitializerDetector.instance).shouldHaveNoInteractions(); + assertThat(bravo.getDependsOn()).isNull(); + }); + }); + } + + private void withAotEnabled(Runnable action) { + System.setProperty("spring.aot.enabled", "true"); + try { + action.run(); + } + finally { + System.clearProperty("spring.aot.enabled"); + } + } + private void performDetection(Collection> detectors, Consumer contextCallback) { DetectorSpringFactoriesClassLoader detectorSpringFactories = new DetectorSpringFactoriesClassLoader(this.temp);