diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfiguration.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfiguration.java index 1a839e95f0..1d1959a065 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfiguration.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfiguration.java @@ -24,6 +24,7 @@ import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.aot.AotDetector; import org.springframework.beans.BeansException; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -83,6 +84,9 @@ public class TestDatabaseAutoConfiguration { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + if (AotDetector.useGeneratedArtifacts()) { + return; + } Assert.isInstanceOf(ConfigurableListableBeanFactory.class, registry, "Test Database Auto-configuration can only be used with a ConfigurableListableBeanFactory"); process(registry, (ConfigurableListableBeanFactory) registry); diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfigurationTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfigurationTests.java index cf494a2fd7..550a8909a9 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/jdbc/TestDatabaseAutoConfigurationTests.java @@ -21,6 +21,7 @@ import javax.sql.DataSource; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration.EmbeddedDataSourceFactoryBean; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -49,6 +50,7 @@ class TestDatabaseAutoConfigurationTests { @Test void replaceWithUniqueDatabase() { this.contextRunner.withUserConfiguration(ExistingDataSourceConfiguration.class).run((context) -> { + assertThat(context).hasSingleBean(EmbeddedDataSourceFactoryBean.class); DataSource datasource = context.getBean(DataSource.class); JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource); jdbcTemplate.execute("create table example (id int, name varchar);"); @@ -60,6 +62,13 @@ class TestDatabaseAutoConfigurationTests { }); } + @Test + void whenUsingAotGeneratedArtifactsEmbeddedDataSourceFactoryBeanIsNotDefined() { + this.contextRunner.withUserConfiguration(ExistingDataSourceConfiguration.class) + .withSystemProperties("spring.aot.enabled=true") + .run((context) -> assertThat(context).doesNotHaveBean(EmbeddedDataSourceFactoryBean.class)); + } + @Configuration(proxyBeanMethods = false) static class ExistingDataSourceConfiguration {