Skip to content

Commit d2df316

Browse files
committed
feat: Optimize DatabaseDriver fromJdbcUrl method with caching
1 parent c1a7331 commit d2df316

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@
1919
import java.util.Arrays;
2020
import java.util.Collection;
2121
import java.util.Collections;
22+
import java.util.HashMap;
23+
import java.util.HashSet;
2224
import java.util.Locale;
25+
import java.util.Map;
26+
import java.util.Set;
2327

2428
import org.springframework.util.Assert;
2529
import org.springframework.util.StringUtils;
@@ -228,6 +232,14 @@ protected Collection<String> getUrlPrefixes() {
228232

229233
private final String validationQuery;
230234

235+
private static final Map<DatabaseDriver, Set<String>> URL_PREFIX_CACHE = new HashMap<>();
236+
237+
static {
238+
for (DatabaseDriver driver : values()) {
239+
URL_PREFIX_CACHE.put(driver, new HashSet<>(driver.getUrlPrefixes()));
240+
}
241+
}
242+
231243
DatabaseDriver(String productName, String driverClassName) {
232244
this(productName, driverClassName, null);
233245
}
@@ -296,8 +308,9 @@ public static DatabaseDriver fromJdbcUrl(String url) {
296308
if (StringUtils.hasLength(url)) {
297309
Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'");
298310
String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase(Locale.ENGLISH);
299-
for (DatabaseDriver driver : values()) {
300-
for (String urlPrefix : driver.getUrlPrefixes()) {
311+
for (Map.Entry<DatabaseDriver, Set<String>> entry : URL_PREFIX_CACHE.entrySet()) {
312+
DatabaseDriver driver = entry.getKey();
313+
for (String urlPrefix : entry.getValue()) {
301314
String prefix = ":" + urlPrefix + ":";
302315
if (driver != UNKNOWN && urlWithoutPrefix.startsWith(prefix)) {
303316
return driver;

0 commit comments

Comments
 (0)