diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java index 4718dace02f..1a0520a47d7 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java @@ -77,7 +77,12 @@ abstract class DataSourceConfiguration { @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") public HikariDataSource dataSource(DataSourceProperties properties) { - return createDataSource(properties, HikariDataSource.class); + HikariDataSource dataSource = createDataSource(properties, + HikariDataSource.class); + if (properties.getName() != null) { + dataSource.setPoolName(properties.getName()); + } + return dataSource; } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java index 2b2b6c7ba3d..dd307aac972 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceJmxConfigurationTests.java @@ -75,7 +75,7 @@ public class DataSourceJmxConfigurationTests { throws MalformedObjectNameException { String poolName = UUID.randomUUID().toString(); load("spring.datasource.type=" + HikariDataSource.class.getName(), - "spring.datasource.hikari.pool-name=" + poolName, + "spring.datasource.name=" + poolName, "spring.datasource.hikari.register-mbeans=true"); assertThat(this.context.getBeansOfType(HikariDataSource.class)).hasSize(1); assertThat(this.context.getBean(HikariDataSource.class).isRegisterMbeans()) @@ -89,7 +89,7 @@ public class DataSourceJmxConfigurationTests { String poolName = UUID.randomUUID().toString(); load("spring.datasource.type=" + HikariDataSource.class.getName(), "spring.jmx.enabled=false", - "spring.datasource.hikari.pool-name=" + poolName, + "spring.datasource.name=" + poolName, "spring.datasource.hikari.register-mbeans=true"); assertThat(this.context.getBeansOfType(HikariDataSource.class)).hasSize(1); assertThat(this.context.getBean(HikariDataSource.class).isRegisterMbeans()) diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java index 0894291251e..3fe39375dd0 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java @@ -24,12 +24,8 @@ import com.zaxxer.hikari.HikariDataSource; import org.junit.After; import org.junit.Test; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -38,33 +34,31 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link HikariDataSourceConfiguration}. * * @author Dave Syer + * @author Stephane Nicoll */ public class HikariDataSourceConfigurationTests { - private static final String PREFIX = "spring.datasource.hikari."; - - private final AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + private AnnotationConfigApplicationContext context; @After - public void restore() { + public void close() { + if (this.context != null) { + this.context.close(); + } EmbeddedDatabaseConnection.override = null; } @Test public void testDataSourceExists() throws Exception { - this.context.register(HikariDataSourceConfiguration.class); - this.context.refresh(); - assertThat(this.context.getBean(DataSource.class)).isNotNull(); - assertThat(this.context.getBean(HikariDataSource.class)).isNotNull(); + load(); + assertThat(this.context.getBeansOfType(DataSource.class)).hasSize(1); + assertThat(this.context.getBeansOfType(HikariDataSource.class)).hasSize(1); } @Test public void testDataSourcePropertiesOverridden() throws Exception { - this.context.register(HikariDataSourceConfiguration.class); - TestPropertyValues.of(PREFIX + "jdbcUrl:jdbc:foo//bar/spam") - .applyTo(this.context); - TestPropertyValues.of(PREFIX + "maxLifetime:1234").applyTo(this.context); - this.context.refresh(); + load("spring.datasource.hikari.jdbc-url=jdbc:foo//bar/spam", + "spring.datasource.hikari.max-lifetime=1234"); HikariDataSource ds = this.context.getBean(HikariDataSource.class); assertThat(ds.getJdbcUrl()).isEqualTo("jdbc:foo//bar/spam"); assertThat(ds.getMaxLifetime()).isEqualTo(1234); @@ -73,12 +67,7 @@ public class HikariDataSourceConfigurationTests { @Test public void testDataSourceGenericPropertiesOverridden() throws Exception { - this.context.register(HikariDataSourceConfiguration.class); - TestPropertyValues - .of(PREFIX - + "dataSourceProperties.dataSourceClassName:org.h2.JDBCDataSource") - .applyTo(this.context); - this.context.refresh(); + load("spring.datasource.hikari.data-source-properties.dataSourceClassName=org.h2.JDBCDataSource"); HikariDataSource ds = this.context.getBean(HikariDataSource.class); assertThat(ds.getDataSourceProperties().getProperty("dataSourceClassName")) .isEqualTo("org.h2.JDBCDataSource"); @@ -86,12 +75,26 @@ public class HikariDataSourceConfigurationTests { @Test public void testDataSourceDefaultsPreserved() throws Exception { - this.context.register(HikariDataSourceConfiguration.class); - this.context.refresh(); + load(); HikariDataSource ds = this.context.getBean(HikariDataSource.class); assertThat(ds.getMaxLifetime()).isEqualTo(1800000); } + @Test + public void nameIsAliasedToPoolName() { + load("spring.datasource.name=myDS"); + HikariDataSource ds = this.context.getBean(HikariDataSource.class); + assertThat(ds.getPoolName()).isEqualTo("myDS"); + } + + @Test + public void poolNameTakesPrecedenceOverName() { + load("spring.datasource.name=myDS", + "spring.datasource.hikari.pool-name=myHikariDS"); + HikariDataSource ds = this.context.getBean(HikariDataSource.class); + assertThat(ds.getPoolName()).isEqualTo("myHikariDS"); + } + @SuppressWarnings("unchecked") public static T getField(Class target, String name) { Field field = ReflectionUtils.findField(target, name, null); @@ -99,16 +102,15 @@ public class HikariDataSourceConfigurationTests { return (T) ReflectionUtils.getField(field, target); } - @Configuration - @EnableConfigurationProperties - protected static class HikariDataSourceConfiguration { - - @Bean - @ConfigurationProperties(prefix = "spring.datasource.hikari") - public DataSource dataSource() { - return DataSourceBuilder.create().type(HikariDataSource.class).build(); - } - + private void load(String... environment) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + TestPropertyValues.of(environment) + .and("spring.datasource.initialize", "false") + .and("spring.datasource.type", HikariDataSource.class.getName()) + .applyTo(ctx); + ctx.register(DataSourceAutoConfiguration.class); + ctx.refresh(); + this.context = ctx; } }