|
19 | 19 | import java.util.Arrays; |
20 | 20 | import java.util.Collection; |
21 | 21 | import java.util.Collections; |
| 22 | +import java.util.HashMap; |
| 23 | +import java.util.HashSet; |
22 | 24 | import java.util.Locale; |
| 25 | +import java.util.Map; |
| 26 | +import java.util.Set; |
23 | 27 |
|
24 | 28 | import org.springframework.util.Assert; |
25 | 29 | import org.springframework.util.StringUtils; |
@@ -228,6 +232,14 @@ protected Collection<String> getUrlPrefixes() { |
228 | 232 |
|
229 | 233 | private final String validationQuery; |
230 | 234 |
|
| 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 | + |
231 | 243 | DatabaseDriver(String productName, String driverClassName) { |
232 | 244 | this(productName, driverClassName, null); |
233 | 245 | } |
@@ -296,8 +308,9 @@ public static DatabaseDriver fromJdbcUrl(String url) { |
296 | 308 | if (StringUtils.hasLength(url)) { |
297 | 309 | Assert.isTrue(url.startsWith("jdbc"), "URL must start with 'jdbc'"); |
298 | 310 | 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()) { |
301 | 314 | String prefix = ":" + urlPrefix + ":"; |
302 | 315 | if (driver != UNKNOWN && urlWithoutPrefix.startsWith(prefix)) { |
303 | 316 | return driver; |
|
0 commit comments