From f504a176e467d2291d256d6c719095ab542e977c Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 15 Apr 2023 23:28:12 +0800 Subject: [PATCH] fix code --- .../hutool/core/io/resource/ResourceUtil.java | 26 ++++++++++++++++--- .../hutool/core/spi/KVServiceLoader.java | 6 ++++- .../hutool/core/spi/ListServiceLoader.java | 1 + 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java index 32da2fbdf..a73615076 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/resource/ResourceUtil.java @@ -278,7 +278,12 @@ public class ResourceUtil { } /** - * 获取同名的所有资源 + * 获取同名的所有资源
+ * 资源的加载顺序是: + * * * @param resource 资源名 * @param classLoader {@link ClassLoader},{@code null}表示使用默认的当前上下文ClassLoader @@ -330,11 +335,26 @@ public class ResourceUtil { * @param resourceName 资源名,可以是相对classpath的路径,也可以是绝对路径 * @param classLoader {@link ClassLoader},{@code null}表示使用默认的当前上下文ClassLoader * @param charset 编码,对XML无效,默认UTF-8 + * @param isOverride 是否覆盖模式 */ public static void loadAllTo(final Properties properties, final String resourceName, - final ClassLoader classLoader, final Charset charset) { + final ClassLoader classLoader, final Charset charset, final boolean isOverride) { + if(isOverride){ + for (final Resource resource : getResources(resourceName, classLoader)) { + loadTo(properties, resource, charset); + } + return; + } + + // 非覆盖模式下,读取配置文件后逐个检查key + final Properties tmpProps = new Properties(); for (final Resource resource : getResources(resourceName, classLoader)) { - loadTo(properties, resource, charset); + loadTo(tmpProps, resource, charset); + tmpProps.forEach((name, value)->{ + if(!properties.containsKey(name)){ + properties.put(name, value); + } + }); } } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/spi/KVServiceLoader.java b/hutool-core/src/main/java/org/dromara/hutool/core/spi/KVServiceLoader.java index 7d92f4aa2..6506dc525 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/spi/KVServiceLoader.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/spi/KVServiceLoader.java @@ -98,12 +98,16 @@ public class KVServiceLoader extends AbsServiceLoader { */ @Override public void load() { + // 解析同名的所有service资源 + // 按照资源加载优先级,先加载和解析的资源优先使用,后加载的同名资源丢弃 final Properties properties = new Properties(); ResourceUtil.loadAllTo( properties, pathPrefix + serviceClass.getName(), classLoader, - charset); + charset, + // 非覆盖模式 + false); this.serviceProperties = properties; } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/spi/ListServiceLoader.java b/hutool-core/src/main/java/org/dromara/hutool/core/spi/ListServiceLoader.java index 929d8a6ae..0523844d4 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/spi/ListServiceLoader.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/spi/ListServiceLoader.java @@ -100,6 +100,7 @@ public class ListServiceLoader extends AbsServiceLoader { @Override public void load() { // 解析同名的所有service资源 + // 按照资源加载优先级,先加载和解析的资源优先使用,后加载的同名资源丢弃 final MultiResource resources = ResourceUtil.getResources( pathPrefix + serviceClass.getName(), this.classLoader);