Skip to content

Commit

Permalink
Make DB init back off without DatabasePopulator
Browse files Browse the repository at this point in the history
Fixes gh-26850
  • Loading branch information
wilkinsona committed Jun 10, 2021
1 parent 2835085 commit 39aa27e
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
Expand Up @@ -18,6 +18,7 @@

import javax.sql.DataSource;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.jdbc.DataSourceBuilder;
Expand All @@ -27,11 +28,13 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.util.StringUtils;

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(AbstractScriptDatabaseInitializer.class)
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnClass(DatabasePopulator.class)
class DataSourceInitializationConfiguration {

@Bean
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.r2dbc.connection.init.DatabasePopulator;
import org.springframework.util.StringUtils;

/**
Expand All @@ -34,7 +35,7 @@
* @author Andy Wilkinson
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ConnectionFactory.class)
@ConditionalOnClass({ ConnectionFactory.class, DatabasePopulator.class })
@ConditionalOnSingleCandidate(ConnectionFactory.class)
class R2dbcInitializationConfiguration {

Expand Down
Expand Up @@ -35,10 +35,12 @@
import org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitialization;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.DatabasePopulator;

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

Expand Down Expand Up @@ -141,6 +143,26 @@ void whenBeanIsAnnotatedAsDependingOnDatabaseInitializationThenItDependsOnDataSo
});
}

@Test
void whenADataSourceIsAvailableAndSpringJdbcIsNotThenAutoConfigurationBacksOff() {
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(DatabasePopulator.class)).run((context) -> {
assertThat(context).hasSingleBean(DataSource.class);
assertThat(context).doesNotHaveBean(AbstractScriptDatabaseInitializer.class);
});
}

@Test
void whenAConnectionFactoryIsAvailableAndSpringR2dbcIsNotThenAutoConfigurationBacksOff() {
this.contextRunner.withConfiguration(AutoConfigurations.of(R2dbcAutoConfiguration.class))
.withClassLoader(
new FilteredClassLoader(org.springframework.r2dbc.connection.init.DatabasePopulator.class))
.run((context) -> {
assertThat(context).hasSingleBean(ConnectionFactory.class);
assertThat(context).doesNotHaveBean(AbstractScriptDatabaseInitializer.class);
});
}

@Configuration(proxyBeanMethods = false)
static class DatabaseInitializerConfiguration {

Expand Down

0 comments on commit 39aa27e

Please sign in to comment.