Skip to content

Commit 39aa27e

Browse files
committed
Make DB init back off without DatabasePopulator
Fixes gh-26850
1 parent 2835085 commit 39aa27e

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import javax.sql.DataSource;
2020

21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2122
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2223
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
2324
import org.springframework.boot.jdbc.DataSourceBuilder;
@@ -27,11 +28,13 @@
2728
import org.springframework.context.annotation.Bean;
2829
import org.springframework.context.annotation.Configuration;
2930
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
31+
import org.springframework.jdbc.datasource.init.DatabasePopulator;
3032
import org.springframework.util.StringUtils;
3133

3234
@Configuration(proxyBeanMethods = false)
3335
@ConditionalOnMissingBean(AbstractScriptDatabaseInitializer.class)
3436
@ConditionalOnSingleCandidate(DataSource.class)
37+
@ConditionalOnClass(DatabasePopulator.class)
3538
class DataSourceInitializationConfiguration {
3639

3740
@Bean

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sql/init/R2dbcInitializationConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
2626
import org.springframework.context.annotation.Bean;
2727
import org.springframework.context.annotation.Configuration;
28+
import org.springframework.r2dbc.connection.init.DatabasePopulator;
2829
import org.springframework.util.StringUtils;
2930

3031
/**
@@ -34,7 +35,7 @@
3435
* @author Andy Wilkinson
3536
*/
3637
@Configuration(proxyBeanMethods = false)
37-
@ConditionalOnClass(ConnectionFactory.class)
38+
@ConditionalOnClass({ ConnectionFactory.class, DatabasePopulator.class })
3839
@ConditionalOnSingleCandidate(ConnectionFactory.class)
3940
class R2dbcInitializationConfiguration {
4041

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/sql/init/SqlInitializationAutoConfigurationTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@
3535
import org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer;
3636
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
3737
import org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitialization;
38+
import org.springframework.boot.test.context.FilteredClassLoader;
3839
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3940
import org.springframework.context.annotation.Bean;
4041
import org.springframework.context.annotation.Configuration;
4142
import org.springframework.core.io.Resource;
43+
import org.springframework.jdbc.datasource.init.DatabasePopulator;
4244

4345
import static org.assertj.core.api.Assertions.assertThat;
4446

@@ -141,6 +143,26 @@ void whenBeanIsAnnotatedAsDependingOnDatabaseInitializationThenItDependsOnDataSo
141143
});
142144
}
143145

146+
@Test
147+
void whenADataSourceIsAvailableAndSpringJdbcIsNotThenAutoConfigurationBacksOff() {
148+
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
149+
.withClassLoader(new FilteredClassLoader(DatabasePopulator.class)).run((context) -> {
150+
assertThat(context).hasSingleBean(DataSource.class);
151+
assertThat(context).doesNotHaveBean(AbstractScriptDatabaseInitializer.class);
152+
});
153+
}
154+
155+
@Test
156+
void whenAConnectionFactoryIsAvailableAndSpringR2dbcIsNotThenAutoConfigurationBacksOff() {
157+
this.contextRunner.withConfiguration(AutoConfigurations.of(R2dbcAutoConfiguration.class))
158+
.withClassLoader(
159+
new FilteredClassLoader(org.springframework.r2dbc.connection.init.DatabasePopulator.class))
160+
.run((context) -> {
161+
assertThat(context).hasSingleBean(ConnectionFactory.class);
162+
assertThat(context).doesNotHaveBean(AbstractScriptDatabaseInitializer.class);
163+
});
164+
}
165+
144166
@Configuration(proxyBeanMethods = false)
145167
static class DatabaseInitializerConfiguration {
146168

0 commit comments

Comments
 (0)