Merge pull request #39376 from ronaldmik
* gh-39376: Polish "Derive driverClassName from URL when otherwise unknown" Derive driverClassName from URL when otherwise unknown Closes gh-39376
This commit is contained in:
@@ -186,8 +186,8 @@ public final class DataSourceBuilder<T extends DataSource> {
|
||||
}
|
||||
if (!applied.contains(DataSourceProperty.DRIVER_CLASS_NAME)
|
||||
&& properties.canSet(DataSourceProperty.DRIVER_CLASS_NAME)
|
||||
&& this.values.containsKey(DataSourceProperty.URL)) {
|
||||
String url = this.values.get(DataSourceProperty.URL);
|
||||
&& 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());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -457,6 +457,36 @@ class DataSourceBuilderTests {
|
||||
assertThat(testSource.getPassword()).isEqualTo("secret");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildWhenDerivedFromCustomTypeDeriveDriverClassNameFromUrl() {
|
||||
NoDriverClassNameDataSource dataSource = new NoDriverClassNameDataSource();
|
||||
dataSource.setUsername("test");
|
||||
dataSource.setPassword("secret");
|
||||
dataSource.setUrl("jdbc:postgresql://localhost:5432/postgres");
|
||||
DataSourceBuilder<?> builder = DataSourceBuilder.derivedFrom(dataSource).type(SimpleDriverDataSource.class);
|
||||
SimpleDriverDataSource testSource = (SimpleDriverDataSource) builder.build();
|
||||
assertThat(testSource.getUsername()).isEqualTo("test");
|
||||
assertThat(testSource.getUrl()).isEqualTo("jdbc:postgresql://localhost:5432/postgres");
|
||||
assertThat(testSource.getPassword()).isEqualTo("secret");
|
||||
assertThat(testSource.getDriver()).isInstanceOf(org.postgresql.Driver.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildWhenDerivedFromCustomTypeDeriveDriverClassNameFromOverridenUrl() {
|
||||
NoDriverClassNameDataSource dataSource = new NoDriverClassNameDataSource();
|
||||
dataSource.setUsername("test");
|
||||
dataSource.setPassword("secret");
|
||||
dataSource.setUrl("jdbc:mysql://localhost:5432/mysql");
|
||||
DataSourceBuilder<?> builder = DataSourceBuilder.derivedFrom(dataSource)
|
||||
.type(SimpleDriverDataSource.class)
|
||||
.url("jdbc:mariadb://localhost:5432/mariadb");
|
||||
SimpleDriverDataSource testSource = (SimpleDriverDataSource) builder.build();
|
||||
assertThat(testSource.getUsername()).isEqualTo("test");
|
||||
assertThat(testSource.getUrl()).isEqualTo("jdbc:mariadb://localhost:5432/mariadb");
|
||||
assertThat(testSource.getPassword()).isEqualTo("secret");
|
||||
assertThat(testSource.getDriver()).isInstanceOf(org.mariadb.jdbc.Driver.class);
|
||||
}
|
||||
|
||||
@Test // gh-31920
|
||||
void buildWhenC3P0TypeSpecifiedReturnsExpectedDataSource() {
|
||||
this.dataSource = DataSourceBuilder.create()
|
||||
@@ -620,12 +650,10 @@ class DataSourceBuilderTests {
|
||||
|
||||
}
|
||||
|
||||
static class CustomDataSource extends LimitedCustomDataSource {
|
||||
static class NoDriverClassNameDataSource extends LimitedCustomDataSource {
|
||||
|
||||
private String url;
|
||||
|
||||
private String driverClassName;
|
||||
|
||||
String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
@@ -634,6 +662,14 @@ class DataSourceBuilderTests {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class CustomDataSource extends LimitedCustomDataSource {
|
||||
|
||||
private String driverClassName;
|
||||
|
||||
private String url;
|
||||
|
||||
String getDriverClassName() {
|
||||
return this.driverClassName;
|
||||
}
|
||||
@@ -642,6 +678,14 @@ class DataSourceBuilderTests {
|
||||
this.driverClassName = driverClassName;
|
||||
}
|
||||
|
||||
String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
|
||||
void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user