From d2df3160d0b45e8eb11eeca3c60337d4c66455f0 Mon Sep 17 00:00:00 2001 From: KIM MIN WOO <79193811+minwoo1999@users.noreply.github.com> Date: Tue, 31 Dec 2024 01:04:44 +0900 Subject: [PATCH] feat: Optimize DatabaseDriver fromJdbcUrl method with caching --- .../boot/jdbc/DatabaseDriver.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DatabaseDriver.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DatabaseDriver.java index 07f582f5b387..352ad6ade771 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DatabaseDriver.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jdbc/DatabaseDriver.java @@ -19,7 +19,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.Locale; +import java.util.Map; +import java.util.Set; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -228,6 +232,14 @@ protected Collection getUrlPrefixes() { private final String validationQuery; + private static final Map> URL_PREFIX_CACHE = new HashMap<>(); + + static { + for (DatabaseDriver driver : values()) { + URL_PREFIX_CACHE.put(driver, new HashSet<>(driver.getUrlPrefixes())); + } + } + DatabaseDriver(String productName, String driverClassName) { this(productName, driverClassName, null); } @@ -296,8 +308,9 @@ public static DatabaseDriver fromJdbcUrl(String url) { if (StringUtils.hasLength(url)) { Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'"); String urlWithoutPrefix = url.substring("jdbc".length()).toLowerCase(Locale.ENGLISH); - for (DatabaseDriver driver : values()) { - for (String urlPrefix : driver.getUrlPrefixes()) { + for (Map.Entry> entry : URL_PREFIX_CACHE.entrySet()) { + DatabaseDriver driver = entry.getKey(); + for (String urlPrefix : entry.getValue()) { String prefix = ":" + urlPrefix + ":"; if (driver != UNKNOWN && urlWithoutPrefix.startsWith(prefix)) { return driver;