diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java index 0cf6eb1b48..5934e3556c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java @@ -58,17 +58,6 @@ public class DataSourceAutoConfiguration { public static final String CONFIGURATION_PREFIX = "spring.datasource"; - @Autowired - private DataSourceProperties properties; - - @Autowired(required = false) - private DataSource dataSource; - - @Bean - public DataSourceInitializer dataSourceAutoConfigurationInitializer() { - return new DataSourceInitializer(); - } - /** * Determines if the {@code dataSource} being used by Spring was created from * {@link EmbeddedDataSourceConfiguration}. @@ -93,6 +82,16 @@ public class DataSourceAutoConfiguration { } + @Configuration + @ConditionalOnMissingBean(DataSourceInitializer.class) + protected static class DataSourceInitializerConfiguration { + + @Bean + public DataSourceInitializer dataSourceInitializer() { + return new DataSourceInitializer(); + } + } + @Conditional(DataSourceAutoConfiguration.NonEmbeddedDatabaseCondition.class) @ConditionalOnMissingBean(DataSource.class) protected static class NonEmbeddedConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java index f1b7bf44ae..f68325b0a1 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java @@ -24,8 +24,13 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.ClassUtils; @@ -67,6 +72,19 @@ public class DataSourceInitializerTests { assertEquals(0, this.context.getBeanNamesForType(DataSource.class).length); } + @Test + public void testTwoDataSources() throws Exception { + EnvironmentTestUtils.addEnvironment(this.context, + "datasource.one.url=jdbc:hsqldb:mem:/one", + "datasource.one.driverClassName=org.hsqldb.Driver", + "datasource.two.url=jdbc:hsqldb:mem:/two", + "datasource.two.driverClassName=org.hsqldb.Driver"); + this.context.register(TwoDataSources.class, DataSourceInitializer.class, + PropertyPlaceholderAutoConfiguration.class, DataSourceProperties.class); + this.context.refresh(); + assertEquals(2, this.context.getBeanNamesForType(DataSource.class).length); + } + @Test public void testDataSourceInitialized() throws Exception { EnvironmentTestUtils.addEnvironment(this.context, @@ -125,4 +143,23 @@ public class DataSourceInitializerTests { template.queryForObject("SELECT COUNT(*) from SPAM", Integer.class)); } + @Configuration + @EnableConfigurationProperties + protected static class TwoDataSources { + + @Bean + @Primary + @ConfigurationProperties(prefix = "datasource.one") + public DataSource oneDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean + @ConfigurationProperties(prefix = "datasource.two") + public DataSource twoDataSource() { + return DataSourceBuilder.create().build(); + } + + } + }