diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java index 95523db179a..61dd0e53abe 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java @@ -49,17 +49,18 @@ import org.springframework.util.StringUtils; abstract class DataSourceConfiguration { @SuppressWarnings("unchecked") - protected static T createDataSource(DataSourceProperties properties, Class type) { + private static T createDataSource(DataSourceProperties properties, Class type) { return (T) properties.initializeDataSourceBuilder().type(type).build(); } @SuppressWarnings("unchecked") - protected static T createDataSource(JdbcConnectionDetails connectionDetails, Class type, + private static T createDataSource(JdbcConnectionDetails connectionDetails, Class type, ClassLoader classLoader) { return (T) DataSourceBuilder.create(classLoader) .url(connectionDetails.getJdbcUrl()) .username(connectionDetails.getUsername()) .password(connectionDetails.getPassword()) + .driverClassName(connectionDetails.getDriverClassName()) .type(type) .build(); } @@ -213,12 +214,7 @@ abstract class DataSourceConfiguration { ObjectProvider connectionDetailsProvider) { JdbcConnectionDetails connectionDetails = connectionDetailsProvider.getIfAvailable(); if (connectionDetails != null) { - return DataSourceBuilder.create(properties.getClassLoader()) - .url(connectionDetails.getJdbcUrl()) - .username(connectionDetails.getUsername()) - .password(connectionDetails.getPassword()) - .type(properties.getType()) - .build(); + return createDataSource(connectionDetails, properties.getType(), properties.getClassLoader()); } return properties.initializeDataSourceBuilder().build(); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java index 7f4542a3430..75329fca7dd 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java @@ -261,8 +261,8 @@ class DataSourceAutoConfigurationTests { .satisfies((dbcp2) -> { assertThat(dbcp2.getUsername()).isEqualTo("user-1"); assertThat(dbcp2.getPassword()).isEqualTo("password-1"); - assertThat(dbcp2.getDriverClassName()).isEqualTo("org.postgresql.Driver"); - assertThat(dbcp2.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(dbcp2.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); + assertThat(dbcp2.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); }); } @@ -278,8 +278,9 @@ class DataSourceAutoConfigurationTests { TestDataSource source = (TestDataSource) dataSource; assertThat(source.getUsername()).isEqualTo("user-1"); assertThat(source.getPassword()).isEqualTo("password-1"); - assertThat(source.getDriver().getClass().getName()).isEqualTo("org.postgresql.Driver"); - assertThat(source.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(source.getDriver().getClass().getName()) + .isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); + assertThat(source.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java index 996e6bd4165..fd3aef26ad3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java @@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; class Dbcp2JdbcConnectionDetailsBeanPostProcessorTests { @Test - void setUsernamePasswordAndUrl() { + void setUsernamePasswordUrlAndDriverClassName() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("will-be-overwritten"); dataSource.setUsername("will-be-overwritten"); @@ -41,7 +41,7 @@ class Dbcp2JdbcConnectionDetailsBeanPostProcessorTests { dataSource.setDriverClassName("will-be-overwritten"); new Dbcp2JdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, new TestJdbcConnectionDetails()); - assertThat(dataSource.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUsername()).isEqualTo("user-1"); assertThat(dataSource.getPassword()).isEqualTo("password-1"); assertThat(dataSource.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java index 35a33edffe3..73e02d1cdc6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java @@ -115,7 +115,7 @@ class HikariDataSourceConfigurationTests { assertThat(hikari.getPassword()).isEqualTo("password-1"); assertThat(hikari.getDriverClassName()).isEqualTo("org.postgresql.Driver"); assertThat(hikari.getJdbcUrl()) - .isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + .isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariJdbcConnectionDetailsBeanPostProcessorTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariJdbcConnectionDetailsBeanPostProcessorTests.java index 8031bea661d..3172a1b5bbf 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariJdbcConnectionDetailsBeanPostProcessorTests.java @@ -41,7 +41,7 @@ class HikariJdbcConnectionDetailsBeanPostProcessorTests { dataSource.setDriverClassName(DatabaseDriver.H2.getDriverClassName()); new HikariJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, new TestJdbcConnectionDetails()); - assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUsername()).isEqualTo("user-1"); assertThat(dataSource.getPassword()).isEqualTo("password-1"); assertThat(dataSource.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpDataSourceConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpDataSourceConfigurationTests.java index c8905b90265..6b901ea4d94 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpDataSourceConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpDataSourceConfigurationTests.java @@ -26,6 +26,7 @@ import oracle.ucp.util.OpaqueString; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -124,8 +125,9 @@ class OracleUcpDataSourceConfigurationTests { assertThat(oracleUcp).extracting("password") .extracting((o) -> ((OpaqueString) o).get()) .isEqualTo("password-1"); - assertThat(oracleUcp.getConnectionFactoryClassName()).isEqualTo("org.postgresql.Driver"); - assertThat(oracleUcp.getURL()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(oracleUcp.getConnectionFactoryClassName()) + .isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); + assertThat(oracleUcp.getURL()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java index 8848bffcd23..03e1f8daab0 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java @@ -36,7 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat; class OracleUcpJdbcConnectionDetailsBeanPostProcessorTests { @Test - void setUsernamePasswordAndUrl() throws SQLException { + void setUsernamePasswordUrlAndDriverClassName() throws SQLException { PoolDataSourceImpl dataSource = new PoolDataSourceImpl(); dataSource.setURL("will-be-overwritten"); dataSource.setUser("will-be-overwritten"); @@ -44,7 +44,7 @@ class OracleUcpJdbcConnectionDetailsBeanPostProcessorTests { dataSource.setConnectionFactoryClassName("will-be-overwritten"); new OracleUcpJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, new TestJdbcConnectionDetails()); - assertThat(dataSource.getURL()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(dataSource.getURL()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUser()).isEqualTo("user-1"); assertThat(dataSource).extracting("password") .extracting((password) -> ((OpaqueString) password).get()) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestJdbcConnectionDetails.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestJdbcConnectionDetails.java index 3f277b01e01..d7d65dd21aa 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestJdbcConnectionDetails.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestJdbcConnectionDetails.java @@ -16,6 +16,8 @@ package org.springframework.boot.autoconfigure.jdbc; +import org.springframework.boot.jdbc.DatabaseDriver; + /** * {@link JdbcConnectionDetails} used in tests. * @@ -25,7 +27,7 @@ class TestJdbcConnectionDetails implements JdbcConnectionDetails { @Override public String getJdbcUrl() { - return "jdbc:postgresql://postgres.example.com:12345/database-1"; + return "jdbc:customdb://customdb.example.com:12345/database-1"; } @Override @@ -38,4 +40,14 @@ class TestJdbcConnectionDetails implements JdbcConnectionDetails { return "password-1"; } + @Override + public String getDriverClassName() { + return DatabaseDriver.POSTGRESQL.getDriverClassName(); + } + + @Override + public String getXaDataSourceClassName() { + return DatabaseDriver.POSTGRESQL.getXaDataSourceClassName(); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java index 5bfc55a32e1..710bfd99c67 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java @@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -125,9 +126,10 @@ class TomcatDataSourceConfigurationTests { org.apache.tomcat.jdbc.pool.DataSource tomcat = (org.apache.tomcat.jdbc.pool.DataSource) dataSource; assertThat(tomcat.getPoolProperties().getUsername()).isEqualTo("user-1"); assertThat(tomcat.getPoolProperties().getPassword()).isEqualTo("password-1"); - assertThat(tomcat.getPoolProperties().getDriverClassName()).isEqualTo("org.postgresql.Driver"); + assertThat(tomcat.getPoolProperties().getDriverClassName()) + .isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); assertThat(tomcat.getPoolProperties().getUrl()) - .isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + .isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java index 5906c6dfde6..8b1073d9780 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java @@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat; class TomcatJdbcConnectionDetailsBeanPostProcessorTests { @Test - void setUsernamePasswordAndUrl() { + void setUsernamePasswordUrlAndDriverClassName() { DataSource dataSource = new DataSource(); dataSource.setUrl("will-be-overwritten"); dataSource.setUsername("will-be-overwritten"); @@ -41,7 +41,7 @@ class TomcatJdbcConnectionDetailsBeanPostProcessorTests { dataSource.setDriverClassName("will-be-overwritten"); new TomcatJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, new TestJdbcConnectionDetails()); - assertThat(dataSource.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1"); + assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUsername()).isEqualTo("user-1"); assertThat(dataSource.getPoolProperties().getPassword()).isEqualTo("password-1"); assertThat(dataSource.getPoolProperties().getDriverClassName()) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfigurationTests.java index 96cb982fa52..4eb29fd207a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/XADataSourceAutoConfigurationTests.java @@ -25,6 +25,7 @@ import org.junit.jupiter.api.Test; import org.postgresql.xa.PGXADataSource; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.jdbc.XADataSourceWrapper; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -35,6 +36,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; /** @@ -95,8 +97,16 @@ class XADataSourceAutoConfigurationTests { @Test void shouldUseConnectionDetailsIfAvailable() { + JdbcConnectionDetails connectionDetails = mock(JdbcConnectionDetails.class); + given(connectionDetails.getUsername()).willReturn("user-1"); + given(connectionDetails.getPassword()).willReturn("password-1"); + given(connectionDetails.getJdbcUrl()).willReturn("jdbc:postgresql://postgres.example.com:12345/database-1"); + given(connectionDetails.getDriverClassName()).willReturn(DatabaseDriver.POSTGRESQL.getDriverClassName()); + given(connectionDetails.getXaDataSourceClassName()) + .willReturn(DatabaseDriver.POSTGRESQL.getXaDataSourceClassName()); new ApplicationContextRunner().withConfiguration(AutoConfigurations.of(XADataSourceAutoConfiguration.class)) - .withUserConfiguration(FromProperties.class, JdbcConnectionDetailsConfiguration.class) + .withUserConfiguration(FromProperties.class) + .withBean(JdbcConnectionDetails.class, () -> connectionDetails) .run((context) -> { MockXADataSourceWrapper wrapper = context.getBean(MockXADataSourceWrapper.class); PGXADataSource dataSource = (PGXADataSource) wrapper.getXaDataSource();