From 759aa785a74017fe2370c354bab7530e421057c3 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 4 Sep 2013 12:00:20 +0100 Subject: [PATCH] Fix bug in datasource autoconfiguration The AbstractDataSourceConfiguration had path= in its @ConfigurationProperties by mistake (should have been value) --- .../jdbc/AbstractDataSourceConfiguration.java | 4 +++- .../jdbc/TomcatDataSourceConfigurationTests.java | 13 +++++++++++++ ...EnableConfigurationPropertiesImportSelector.java | 3 ++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceConfiguration.java index 3880a9fe99..2fc71144a0 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/AbstractDataSourceConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.jdbc; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.util.StringUtils; /** @@ -26,7 +27,8 @@ import org.springframework.util.StringUtils; * * @author Dave Syer */ -@ConfigurationProperties(path = "spring.datasource") +@ConfigurationProperties(name = "spring.datasource") +@EnableConfigurationProperties public abstract class AbstractDataSourceConfiguration implements BeanClassLoaderAware { private String driverClassName; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java index f9f25bc396..812d0c983c 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java @@ -23,10 +23,12 @@ import javax.sql.DataSource; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.boot.TestUtils; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.util.ReflectionUtils; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** @@ -48,6 +50,17 @@ public class TomcatDataSourceConfigurationTests { this.context.register(TomcatDataSourceConfiguration.class); this.context.refresh(); assertNotNull(this.context.getBean(DataSource.class)); + assertNotNull(this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class)); + } + + @Test + public void testDataSourcePropertiesOverridden() throws Exception { + this.context.register(TomcatDataSourceConfiguration.class); + TestUtils.addEnviroment(this.context, "spring.datasource.url:jdbc:foo//bar/spam"); + this.context.refresh(); + assertEquals("jdbc:foo//bar/spam", + this.context.getBean(org.apache.tomcat.jdbc.pool.DataSource.class) + .getUrl()); } @Test(expected = BeanCreationException.class) diff --git a/spring-boot/src/main/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector.java b/spring-boot/src/main/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector.java index cd266b291c..b321dd11f8 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesImportSelector.java @@ -46,7 +46,8 @@ class EnableConfigurationPropertiesImportSelector implements ImportSelector { public String[] selectImports(AnnotationMetadata metadata) { MultiValueMap attributes = metadata.getAllAnnotationAttributes( EnableConfigurationProperties.class.getName(), false); - Object[] type = (Object[]) attributes.getFirst("value"); + Object[] type = attributes == null ? null : (Object[]) attributes + .getFirst("value"); if (type == null || type.length == 0) { return new String[] { ConfigurationPropertiesBindingPostProcessorRegistrar.class .getName() };