@ -36,8 +36,10 @@ import org.springframework.context.annotation.ConditionContext;
import org.springframework.context.annotation.Conditional ;
import org.springframework.context.annotation.Conditional ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.context.annotation.Import ;
import org.springframework.context.annotation.Import ;
import org.springframework.core.env.Environment ;
import org.springframework.core.type.AnnotatedTypeMetadata ;
import org.springframework.core.type.AnnotatedTypeMetadata ;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType ;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType ;
import org.springframework.util.StringUtils ;
/ * *
/ * *
* { @link EnableAutoConfiguration Auto - configuration } for { @link DataSource } .
* { @link EnableAutoConfiguration Auto - configuration } for { @link DataSource } .
@ -135,8 +137,7 @@ public class DataSourceAutoConfiguration {
@Override
@Override
public ConditionOutcome getMatchOutcome ( ConditionContext context , AnnotatedTypeMetadata metadata ) {
public ConditionOutcome getMatchOutcome ( ConditionContext context , AnnotatedTypeMetadata metadata ) {
ConditionMessage . Builder message = ConditionMessage . forCondition ( "EmbeddedDataSource" ) ;
ConditionMessage . Builder message = ConditionMessage . forCondition ( "EmbeddedDataSource" ) ;
boolean hasDatasourceUrl = context . getEnvironment ( ) . containsProperty ( DATASOURCE_URL_PROPERTY ) ;
if ( hasDataSourceUrlProperty ( context ) ) {
if ( hasDatasourceUrl ) {
return ConditionOutcome . noMatch ( message . because ( DATASOURCE_URL_PROPERTY + " is set" ) ) ;
return ConditionOutcome . noMatch ( message . because ( DATASOURCE_URL_PROPERTY + " is set" ) ) ;
}
}
if ( anyMatches ( context , metadata , this . pooledCondition ) ) {
if ( anyMatches ( context , metadata , this . pooledCondition ) ) {
@ -149,6 +150,19 @@ public class DataSourceAutoConfiguration {
return ConditionOutcome . match ( message . found ( "embedded database" ) . items ( type ) ) ;
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 ;
}
}
}
}
}