Merge branch '2.2.x'
Closes gh-21004
This commit is contained in:
@@ -36,8 +36,10 @@ import org.springframework.context.annotation.ConditionContext;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for {@link DataSource}.
|
||||
@@ -125,8 +127,7 @@ public class DataSourceAutoConfiguration {
|
||||
@Override
|
||||
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||
ConditionMessage.Builder message = ConditionMessage.forCondition("EmbeddedDataSource");
|
||||
boolean hasDatasourceUrl = context.getEnvironment().containsProperty(DATASOURCE_URL_PROPERTY);
|
||||
if (hasDatasourceUrl) {
|
||||
if (hasDataSourceUrlProperty(context)) {
|
||||
return ConditionOutcome.noMatch(message.because(DATASOURCE_URL_PROPERTY + " is set"));
|
||||
}
|
||||
if (anyMatches(context, metadata, this.pooledCondition)) {
|
||||
@@ -139,6 +140,19 @@ public class DataSourceAutoConfiguration {
|
||||
return ConditionOutcome.match(message.found("embedded database").items(type));
|
||||
}
|
||||
|
||||
private boolean hasDataSourceUrlProperty(ConditionContext context) {
|
||||
Environment environment = context.getEnvironment();
|
||||
if (environment.containsProperty(DATASOURCE_URL_PROPERTY)) {
|
||||
try {
|
||||
return StringUtils.hasText(environment.getProperty(DATASOURCE_URL_PROPERTY));
|
||||
}
|
||||
catch (IllegalArgumentException ex) {
|
||||
// Ignore unresolvable placeholder errors
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -209,6 +210,12 @@ class DataSourceAutoConfigurationTests {
|
||||
.run((context) -> assertThat(context).getBean(DataSource.class).isInstanceOf(BasicDataSource.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenThereIsAnEmptyUserProvidedDataSource() {
|
||||
this.contextRunner.with(hideConnectionPools()).withPropertyValues("spring.datasource.url:")
|
||||
.run((context) -> assertThat(context).getBean(DataSource.class).isInstanceOf(EmbeddedDatabase.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDataSourceIsInitializedEarly() {
|
||||
this.contextRunner.withUserConfiguration(TestInitializedDataSourceConfiguration.class)
|
||||
|
||||
Reference in New Issue
Block a user