From 346153267986421ae065d7c98c7a1ef8446201db Mon Sep 17 00:00:00 2001 From: yukaidi Date: Fri, 29 May 2026 11:54:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ConfigUtil=20=E8=AF=BB=E5=8F=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=A4=B1=E8=B4=A5=E6=97=B6=E8=87=AA=E5=8A=A8=E5=B0=9D?= =?UTF-8?q?=E8=AF=95=20resources/=20=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当文件系统直接读取 app.yml 失败时(如 Docker 卷挂载场景), ConfigUtil.readConfig 现在会自动尝试 resources/ 子目录作为 fallback,确保配置文件在各种部署方式下都能被正确加载。 --- .../java/cn/qaiu/vx/core/util/ConfigUtil.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/cn/qaiu/vx/core/util/ConfigUtil.java b/core/src/main/java/cn/qaiu/vx/core/util/ConfigUtil.java index fbcc5b3..4b15dc7 100644 --- a/core/src/main/java/cn/qaiu/vx/core/util/ConfigUtil.java +++ b/core/src/main/java/cn/qaiu/vx/core/util/ConfigUtil.java @@ -10,6 +10,8 @@ import io.vertx.core.json.JsonObject; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; /** * 异步读取配置工具类 @@ -67,10 +69,30 @@ public class ConfigUtil { retriever.close(); }) .onFailure(err -> { - // 配置读取失败,直接返回失败 Future - promise.fail(new RuntimeException( - "读取配置文件失败: " + path, err)); retriever.close(); + // 读取失败时,尝试从 resources/ 子目录读取(兼容 Docker 卷挂载场景) + String resourcesPath = "resources/" + path; + if (!path.startsWith("resources/") && Files.exists(Path.of(resourcesPath))) { + ConfigStoreOptions fallbackStore = new ConfigStoreOptions() + .setType("file") + .setFormat(format) + .setConfig(new JsonObject().put("path", resourcesPath)); + ConfigRetriever fallbackRetriever = ConfigRetriever + .create(vertx, new ConfigRetrieverOptions().addStore(fallbackStore)); + fallbackRetriever.getConfig() + .onSuccess(config -> { + promise.complete(config); + fallbackRetriever.close(); + }) + .onFailure(e2 -> { + promise.fail(new RuntimeException( + "读取配置文件失败: " + path + " (也尝试了 " + resourcesPath + ")", e2)); + fallbackRetriever.close(); + }); + } else { + promise.fail(new RuntimeException( + "读取配置文件失败: " + path, err)); + } }); return promise.future();