Spring Boot 接入 Apollo 后,配置可以读取,但启动日志里出现:

Located meta server address http://localhost:8080
for env UNKNOWN

这不一定立即导致启动失败,却说明客户端没有识别出预期的环境。配置能用,也可能只是因为另一个入口提供了可访问的 Meta Server,不能据此确认开发、测试和生产已经正确隔离。

先确认 env 的配置入口

在这条 2019 年的客户端使用记录中,环境可以通过下面三个入口提供。维护同类旧项目时,应对照所用客户端版本核对实际读取规则:

入口示例
Java System Property-Denv=DEV
操作系统环境变量ENV=DEV
server.propertiesenv=DEV

当时指南列出的文件位置为 macOS/Linux 的 /opt/settings/server.properties,以及 Windows 的 C:\opt\settings\server.properties。我在 Windows 对应文件中补上 env=DEV 后,日志不再显示 UNKNOWN。

这里的值应使用系统实际配置的环境;DEV、FAT、UAT、PRO 是这套历史环境体系中的常见名称,不是要求所有部署都照搬这四个标签。

JVM 参数放在 -jar 之前

使用系统属性启动时,示例为:

java -Denv=DEV -jar app.jar

env 是小写系统属性名;操作系统变量则是大写 ENV。把 -Denv 放到 JAR 后面,可能只成为应用参数,而不是预期的 JVM 属性。

不要在启动参数、系统变量和配置文件里各写一个不同值。若确实存在多种来源,逐一确认对应版本的优先级,而不是只编辑最后看到的文件。Apollo Java 客户端配置指南

env 与 Meta Server 都要核对

客户端环境标识、Meta Server 地址和实际取得的 namespace 配置应一起检查。新旧版本及部署方式可能采用显式 Meta Server 等配置,不能只看 env 字样推断请求去了哪个环境。

启动后检查有效配置和连接目标,确认没有误用 localhost、旧测试地址或另一套账号。日志示例中的 localhost 仅用于说明当年的现象,不是可直接应用到生产的地址。

遇到 UNKNOWN,先查运行进程看得到的配置来源,再查服务发现与实际目标;这样比反复修改 application 文件却忽略启动环境更有针对性。