Skip to content

Commit d69335d

Browse files
committed
Use driver class name from JdbcConnectionDetails
Fixes gh-34777
1 parent b91f814 commit d69335d

11 files changed

+49
-26
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,18 @@
4949
abstract class DataSourceConfiguration {
5050

5151
@SuppressWarnings("unchecked")
52-
protected static <T> T createDataSource(DataSourceProperties properties, Class<? extends DataSource> type) {
52+
private static <T> T createDataSource(DataSourceProperties properties, Class<? extends DataSource> type) {
5353
return (T) properties.initializeDataSourceBuilder().type(type).build();
5454
}
5555

5656
@SuppressWarnings("unchecked")
57-
protected static <T> T createDataSource(JdbcConnectionDetails connectionDetails, Class<? extends DataSource> type,
57+
private static <T> T createDataSource(JdbcConnectionDetails connectionDetails, Class<? extends DataSource> type,
5858
ClassLoader classLoader) {
5959
return (T) DataSourceBuilder.create(classLoader)
6060
.url(connectionDetails.getJdbcUrl())
6161
.username(connectionDetails.getUsername())
6262
.password(connectionDetails.getPassword())
63+
.driverClassName(connectionDetails.getDriverClassName())
6364
.type(type)
6465
.build();
6566
}
@@ -213,12 +214,7 @@ DataSource dataSource(DataSourceProperties properties,
213214
ObjectProvider<JdbcConnectionDetails> connectionDetailsProvider) {
214215
JdbcConnectionDetails connectionDetails = connectionDetailsProvider.getIfAvailable();
215216
if (connectionDetails != null) {
216-
return DataSourceBuilder.create(properties.getClassLoader())
217-
.url(connectionDetails.getJdbcUrl())
218-
.username(connectionDetails.getUsername())
219-
.password(connectionDetails.getPassword())
220-
.type(properties.getType())
221-
.build();
217+
return createDataSource(connectionDetails, properties.getType(), properties.getClassLoader());
222218
}
223219
return properties.initializeDataSourceBuilder().build();
224220
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,8 @@ void dbcp2UsesJdbcConnectionDetailsIfAvailable() {
261261
.satisfies((dbcp2) -> {
262262
assertThat(dbcp2.getUsername()).isEqualTo("user-1");
263263
assertThat(dbcp2.getPassword()).isEqualTo("password-1");
264-
assertThat(dbcp2.getDriverClassName()).isEqualTo("org.postgresql.Driver");
265-
assertThat(dbcp2.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
264+
assertThat(dbcp2.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());
265+
assertThat(dbcp2.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
266266
});
267267
});
268268
}
@@ -278,8 +278,9 @@ void genericUsesJdbcConnectionDetailsIfAvailable() {
278278
TestDataSource source = (TestDataSource) dataSource;
279279
assertThat(source.getUsername()).isEqualTo("user-1");
280280
assertThat(source.getPassword()).isEqualTo("password-1");
281-
assertThat(source.getDriver().getClass().getName()).isEqualTo("org.postgresql.Driver");
282-
assertThat(source.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
281+
assertThat(source.getDriver().getClass().getName())
282+
.isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());
283+
assertThat(source.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
283284
});
284285
}
285286

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@
3333
class Dbcp2JdbcConnectionDetailsBeanPostProcessorTests {
3434

3535
@Test
36-
void setUsernamePasswordAndUrl() {
36+
void setUsernamePasswordUrlAndDriverClassName() {
3737
BasicDataSource dataSource = new BasicDataSource();
3838
dataSource.setUrl("will-be-overwritten");
3939
dataSource.setUsername("will-be-overwritten");
4040
dataSource.setPassword("will-be-overwritten");
4141
dataSource.setDriverClassName("will-be-overwritten");
4242
new Dbcp2JdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource,
4343
new TestJdbcConnectionDetails());
44-
assertThat(dataSource.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
44+
assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
4545
assertThat(dataSource.getUsername()).isEqualTo("user-1");
4646
assertThat(dataSource.getPassword()).isEqualTo("password-1");
4747
assertThat(dataSource.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariDataSourceConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ void usesConnectionDetailsIfAvailable() {
115115
assertThat(hikari.getPassword()).isEqualTo("password-1");
116116
assertThat(hikari.getDriverClassName()).isEqualTo("org.postgresql.Driver");
117117
assertThat(hikari.getJdbcUrl())
118-
.isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
118+
.isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
119119
});
120120
});
121121
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/HikariJdbcConnectionDetailsBeanPostProcessorTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void setUsernamePasswordAndUrl() {
4141
dataSource.setDriverClassName(DatabaseDriver.H2.getDriverClassName());
4242
new HikariJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource,
4343
new TestJdbcConnectionDetails());
44-
assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
44+
assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
4545
assertThat(dataSource.getUsername()).isEqualTo("user-1");
4646
assertThat(dataSource.getPassword()).isEqualTo("password-1");
4747
assertThat(dataSource.getDriverClassName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpDataSourceConfigurationTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.junit.jupiter.api.Test;
2727

2828
import org.springframework.boot.autoconfigure.AutoConfigurations;
29+
import org.springframework.boot.jdbc.DatabaseDriver;
2930
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3031
import org.springframework.context.annotation.Bean;
3132
import org.springframework.context.annotation.Configuration;
@@ -124,8 +125,9 @@ void usesJdbcConnectionDetailsIfAvailable() {
124125
assertThat(oracleUcp).extracting("password")
125126
.extracting((o) -> ((OpaqueString) o).get())
126127
.isEqualTo("password-1");
127-
assertThat(oracleUcp.getConnectionFactoryClassName()).isEqualTo("org.postgresql.Driver");
128-
assertThat(oracleUcp.getURL()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
128+
assertThat(oracleUcp.getConnectionFactoryClassName())
129+
.isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());
130+
assertThat(oracleUcp.getURL()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
129131
});
130132
}
131133

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@
3636
class OracleUcpJdbcConnectionDetailsBeanPostProcessorTests {
3737

3838
@Test
39-
void setUsernamePasswordAndUrl() throws SQLException {
39+
void setUsernamePasswordUrlAndDriverClassName() throws SQLException {
4040
PoolDataSourceImpl dataSource = new PoolDataSourceImpl();
4141
dataSource.setURL("will-be-overwritten");
4242
dataSource.setUser("will-be-overwritten");
4343
dataSource.setPassword("will-be-overwritten");
4444
dataSource.setConnectionFactoryClassName("will-be-overwritten");
4545
new OracleUcpJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource,
4646
new TestJdbcConnectionDetails());
47-
assertThat(dataSource.getURL()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
47+
assertThat(dataSource.getURL()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
4848
assertThat(dataSource.getUser()).isEqualTo("user-1");
4949
assertThat(dataSource).extracting("password")
5050
.extracting((password) -> ((OpaqueString) password).get())

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TestJdbcConnectionDetails.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.boot.autoconfigure.jdbc;
1818

19+
import org.springframework.boot.jdbc.DatabaseDriver;
20+
1921
/**
2022
* {@link JdbcConnectionDetails} used in tests.
2123
*
@@ -25,7 +27,7 @@ class TestJdbcConnectionDetails implements JdbcConnectionDetails {
2527

2628
@Override
2729
public String getJdbcUrl() {
28-
return "jdbc:postgresql://postgres.example.com:12345/database-1";
30+
return "jdbc:customdb://customdb.example.com:12345/database-1";
2931
}
3032

3133
@Override
@@ -38,4 +40,14 @@ public String getPassword() {
3840
return "password-1";
3941
}
4042

43+
@Override
44+
public String getDriverClassName() {
45+
return DatabaseDriver.POSTGRESQL.getDriverClassName();
46+
}
47+
48+
@Override
49+
public String getXaDataSourceClassName() {
50+
return DatabaseDriver.POSTGRESQL.getXaDataSourceClassName();
51+
}
52+
4153
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatDataSourceConfigurationTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.boot.context.properties.ConfigurationProperties;
2929
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3030
import org.springframework.boot.jdbc.DataSourceBuilder;
31+
import org.springframework.boot.jdbc.DatabaseDriver;
3132
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3233
import org.springframework.boot.test.util.TestPropertyValues;
3334
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -125,9 +126,10 @@ void usesJdbcConnectionDetailsIfAvailable() {
125126
org.apache.tomcat.jdbc.pool.DataSource tomcat = (org.apache.tomcat.jdbc.pool.DataSource) dataSource;
126127
assertThat(tomcat.getPoolProperties().getUsername()).isEqualTo("user-1");
127128
assertThat(tomcat.getPoolProperties().getPassword()).isEqualTo("password-1");
128-
assertThat(tomcat.getPoolProperties().getDriverClassName()).isEqualTo("org.postgresql.Driver");
129+
assertThat(tomcat.getPoolProperties().getDriverClassName())
130+
.isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName());
129131
assertThat(tomcat.getPoolProperties().getUrl())
130-
.isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
132+
.isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
131133
});
132134
}
133135

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@
3333
class TomcatJdbcConnectionDetailsBeanPostProcessorTests {
3434

3535
@Test
36-
void setUsernamePasswordAndUrl() {
36+
void setUsernamePasswordUrlAndDriverClassName() {
3737
DataSource dataSource = new DataSource();
3838
dataSource.setUrl("will-be-overwritten");
3939
dataSource.setUsername("will-be-overwritten");
4040
dataSource.setPassword("will-be-overwritten");
4141
dataSource.setDriverClassName("will-be-overwritten");
4242
new TomcatJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource,
4343
new TestJdbcConnectionDetails());
44-
assertThat(dataSource.getUrl()).isEqualTo("jdbc:postgresql://postgres.example.com:12345/database-1");
44+
assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1");
4545
assertThat(dataSource.getUsername()).isEqualTo("user-1");
4646
assertThat(dataSource.getPoolProperties().getPassword()).isEqualTo("password-1");
4747
assertThat(dataSource.getPoolProperties().getDriverClassName())

0 commit comments

Comments
 (0)