diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java index c71a224b6e6..afc3edbf9d6 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DataSourceBuilder.java @@ -191,7 +191,10 @@ public final class DataSourceBuilder { && applied.contains(DataSourceProperty.URL)) { String url = properties.get(dataSource, DataSourceProperty.URL); DatabaseDriver driver = DatabaseDriver.fromJdbcUrl(url); - properties.set(dataSource, DataSourceProperty.DRIVER_CLASS_NAME, driver.getDriverClassName()); + String driverClassName = driver.getDriverClassName(); + if (driverClassName != null) { + properties.set(dataSource, DataSourceProperty.DRIVER_CLASS_NAME, driver.getDriverClassName()); + } } return dataSource; } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java index 53c6d6d505d..2601666af2b 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java @@ -522,6 +522,15 @@ class DataSourceBuilderTests { assertThat(viburDataSource.getDriverClassName()).isEqualTo("com.example.Driver"); } + @Test + void buildWhenJdbcUrlIsFromUnknownDriverLeavesDriverClassNameUnset() { + this.dataSource = DataSourceBuilder.create() + .url("jdbc:example://localhost:1234/example") + .type(HikariDataSource.class) + .build(); + assertThat(((HikariDataSource) this.dataSource).getDriverClassName()).isNull(); + } + private DataSource wrap(DataSource target) { return new DataSourceWrapper(target); }