From 96f078e57bb92045bdf45dd3b1fca490ac1a1214 Mon Sep 17 00:00:00 2001 From: tinexw Date: Fri, 6 Oct 2017 22:45:07 +0200 Subject: [PATCH 1/2] Fix NPE if no database url is given Fixes gh-8690 --- .../boot/autoconfigure/jdbc/DataSourceProperties.java | 10 +++++++++- .../autoconfigure/jdbc/DataSourcePropertiesTests.java | 10 ++++++++++ .../boot/jdbc/EmbeddedDatabaseConnection.java | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java index 40264375ac82..860e83249389 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java @@ -24,6 +24,9 @@ import javax.sql.DataSource; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.InitializingBean; @@ -46,11 +49,14 @@ * @author Stephane Nicoll * @author Benedikt Ritter * @author Eddú Meléndez + * @author Kristine Jetzke * @since 1.1.0 */ @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties - implements BeanClassLoaderAware, EnvironmentAware, InitializingBean { + implements BeanClassLoaderAware, EnvironmentAware, InitializingBean { + + private static final Log logger = LogFactory.getLog(DataSourceProperties.class); private ClassLoader classLoader; @@ -288,6 +294,8 @@ public String determineUrl() { if (StringUtils.hasText(this.url)) { return this.url; } + + logger.debug("No url defined, looking for embedded database."); String url = this.embeddedDatabaseConnection.getUrl(determineDatabaseName()); if (!StringUtils.hasText(url)) { throw new DataSourceBeanCreationException(this.embeddedDatabaseConnection, diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePropertiesTests.java index 92a64ccb617c..fed7a9f7c19c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourcePropertiesTests.java @@ -21,6 +21,7 @@ import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Tests for {@link DataSourceProperties}. @@ -28,6 +29,7 @@ * @author Maciej Walkowiak * @author Stephane Nicoll * @author Eddú Meléndez + * @author Kristine Jetzke */ public class DataSourcePropertiesTests { @@ -59,6 +61,14 @@ public void determineUrl() throws Exception { .isEqualTo(EmbeddedDatabaseConnection.H2.getUrl()); } + @Test + public void determineUrlUrlNull() throws Exception { + DataSourceProperties properties = new DataSourceProperties(); + assertThatThrownBy(() -> properties.determineUrl()) + .isInstanceOf(DataSourceProperties.DataSourceBeanCreationException.class) + .hasMessageContaining("Cannot determine embedded database url"); + } + @Test public void determineUrlWithExplicitConfig() throws Exception { DataSourceProperties properties = new DataSourceProperties(); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnection.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnection.java index eccfafac17ed..f5edcd424dba 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnection.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnection.java @@ -34,6 +34,7 @@ * @author Phillip Webb * @author Dave Syer * @author Stephane Nicoll + * @author Kristine Jetzke * @see #get(ClassLoader) */ public enum EmbeddedDatabaseConnection { @@ -106,7 +107,7 @@ public String getUrl() { */ public String getUrl(String databaseName) { Assert.hasText(databaseName, "DatabaseName must not be null."); - return String.format(this.url, databaseName); + return this.url != null ? String.format(this.url, databaseName) : null; } /** From e045b365869bab5715cdfc05bb06b1bf0384da21 Mon Sep 17 00:00:00 2001 From: tinexw Date: Tue, 17 Oct 2017 17:27:35 +0200 Subject: [PATCH 2/2] Fix formatting Fixes gh-8690 --- .../boot/autoconfigure/jdbc/DataSourceProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java index 860e83249389..be828da55397 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java @@ -54,7 +54,7 @@ */ @ConfigurationProperties(prefix = "spring.datasource") public class DataSourceProperties - implements BeanClassLoaderAware, EnvironmentAware, InitializingBean { + implements BeanClassLoaderAware, EnvironmentAware, InitializingBean { private static final Log logger = LogFactory.getLog(DataSourceProperties.class);