From cae3a92eadb092bba6e860d57f70cd27bddf55f9 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 4 Apr 2025 08:38:11 +0100 Subject: [PATCH] Fix NPE with Hikari when DatabaseDriver has null driverClassName Fixes gh-44994 --- .../org/springframework/boot/jdbc/DataSourceBuilder.java | 5 ++++- .../boot/jdbc/DataSourceBuilderTests.java | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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 5bbc5b861ba..b37b8816881 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 @@ -190,7 +190,10 @@ public final class DataSourceBuilder { && this.values.containsKey(DataSourceProperty.URL)) { String url = this.values.get(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 216f22d5b10..363583f9e00 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 @@ -474,6 +474,15 @@ class DataSourceBuilderTests { assertThat(c3p0DataSource.getDriverClass()).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); }