This commit is contained in:
Looly 2023-04-15 23:28:12 +08:00
parent 656c551068
commit f504a176e4
3 changed files with 29 additions and 4 deletions

View File

@ -278,7 +278,12 @@ public class ResourceUtil {
} }
/** /**
* 获取同名的所有资源 * 获取同名的所有资源<br>
* 资源的加载顺序是
* <ul>
* <li>1. 首先在本项目下查找资源文件</li>
* <li>2. 按照classpath定义的顺序去对应路径或jar包下寻找资源文件</li>
* </ul>
* *
* @param resource 资源名 * @param resource 资源名
* @param classLoader {@link ClassLoader}{@code null}表示使用默认的当前上下文ClassLoader * @param classLoader {@link ClassLoader}{@code null}表示使用默认的当前上下文ClassLoader
@ -330,11 +335,26 @@ public class ResourceUtil {
* @param resourceName 资源名可以是相对classpath的路径也可以是绝对路径 * @param resourceName 资源名可以是相对classpath的路径也可以是绝对路径
* @param classLoader {@link ClassLoader}{@code null}表示使用默认的当前上下文ClassLoader * @param classLoader {@link ClassLoader}{@code null}表示使用默认的当前上下文ClassLoader
* @param charset 编码对XML无效默认UTF-8 * @param charset 编码对XML无效默认UTF-8
* @param isOverride 是否覆盖模式
*/ */
public static void loadAllTo(final Properties properties, final String resourceName, 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)) { for (final Resource resource : getResources(resourceName, classLoader)) {
loadTo(properties, resource, charset); loadTo(properties, resource, charset);
} }
return;
}
// 非覆盖模式下读取配置文件后逐个检查key
final Properties tmpProps = new Properties();
for (final Resource resource : getResources(resourceName, classLoader)) {
loadTo(tmpProps, resource, charset);
tmpProps.forEach((name, value)->{
if(!properties.containsKey(name)){
properties.put(name, value);
}
});
}
} }
} }

View File

@ -98,12 +98,16 @@ public class KVServiceLoader<S> extends AbsServiceLoader<S> {
*/ */
@Override @Override
public void load() { public void load() {
// 解析同名的所有service资源
// 按照资源加载优先级先加载和解析的资源优先使用后加载的同名资源丢弃
final Properties properties = new Properties(); final Properties properties = new Properties();
ResourceUtil.loadAllTo( ResourceUtil.loadAllTo(
properties, properties,
pathPrefix + serviceClass.getName(), pathPrefix + serviceClass.getName(),
classLoader, classLoader,
charset); charset,
// 非覆盖模式
false);
this.serviceProperties = properties; this.serviceProperties = properties;
} }

View File

@ -100,6 +100,7 @@ public class ListServiceLoader<S> extends AbsServiceLoader<S> {
@Override @Override
public void load() { public void load() {
// 解析同名的所有service资源 // 解析同名的所有service资源
// 按照资源加载优先级先加载和解析的资源优先使用后加载的同名资源丢弃
final MultiResource resources = ResourceUtil.getResources( final MultiResource resources = ResourceUtil.getResources(
pathPrefix + serviceClass.getName(), pathPrefix + serviceClass.getName(),
this.classLoader); this.classLoader);