Apollo安装失败主因是数据库初始化、JAVA_HOME未生效或启动顺序错误;须先改MySQL 8.0+认证插件为mysql_native_password,再创建ApolloPortalDB和ApolloConfigDB并导入对应SQL,严格按configservice→adminservice→portal顺序启动。

能装,但90%的失败都卡在数据库初始化、$JAVA_HOME没生效、或服务启动顺序错了——不是 Apollo 本身难,是它对前置条件极其敏感。
MySQL 8.0+ 连不上?先改认证插件再导入 SQL
MySQL 8.0 默认用 caching_sha2_password,Apollo 的 JDBC 驱动不认,报错典型是:Client does not support authentication protocol。这不是密码输错,是协议不兼容。
- 登录 MySQL 后立刻执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 再导入两个 SQL 文件:
mysql -uroot -p < apolloportaldb.sql和mysql -uroot -p < apolloconfigdb.sql - 必须先建库再导入:
CREATE DATABASE ApolloPortalDB DEFAULT CHARSET utf8mb4;、CREATE DATABASE ApolloConfigDB DEFAULT CHARSET utf8mb4; - 密码里不能含空格,否则
spring.datasource.password解析失败,日志只显示Connection refused,实际是连接池根本没起来
Java 环境配对了,但 Apollo 还是找不到 JDK
java -version 显示正常 ≠ Apollo 能用。它依赖 $JAVA_HOME 环境变量指向一个含 /bin/java 的完整 JDK 路径。
- 运行
echo $JAVA_HOME,确认输出非空且路径下存在bin/java - 若用 OpenJDK 11,解压后需手动设:
export JAVA_HOME=/usr/local/jdk-11.0.6,并写入/etc/profile后执行source /etc/profile - 检查 Apollo 启动脚本(如
startup.sh)是否显式引用了$JAVA_HOME;有些发行包会 fallback 到java命令,但 Portal 服务常因此静默失败
三个服务必须按 configservice → adminservice → portal 顺序启动
Portal 依赖 AdminService 提供用户权限和配置元数据接口,AdminService 又依赖 ConfigService 的配置推送能力。跳过任一环,后续服务会卡在“等待注册”或返回 404。
- 启动前确认端口未被占用:
netstat -tuln | grep -E ':(8070|8080|8090)' - ConfigService 启动后,立刻验证 Eureka 注册:
curl http://127.0.0.1:8080/eureka/apps应返回 XML 或 JSON,不含 docker0/veth* 网卡 IP(如有,加 JVM 参数:-Dspring.cloud.inetutils.ignoredInterfaces=docker0,veth) - 修改
apollo-configservice/conf/application-github.properties时,apollo.profile=github必须显式设置,否则读不到该文件 - Portal 的
apollo-env.properties中dev.meta必须填对 ConfigService 地址,例如:dev.meta=http://127.0.0.1:8080
动态更新中间件参数,光改 Apollo 控制台没用
配置中心只负责“下发”,客户端得主动“接收+响应”。比如改 Redis maxIdle,不重建连接池,值永远不变。
- Spring Boot 客户端必须加
@EnableApolloConfig,且依赖为apollo-client(不是spring-cloud-starter-alibaba-nacos-config) - 配置项要在 Apollo 控制台发布成功(状态为“已发布”),未发布的 key 读出来是默认值或 null
- 监听变更不能只靠
@Value:需配合@ApolloConfigChangeListener("application")回调,并在方法内手动触发 Bean 重建(如JedisPool关闭旧实例、新建新实例) - 注意线程安全:重建连接池时,要避免正在使用的连接被突然关闭,建议用双检锁或原子引用替换
最容易被忽略的是:ConfigService 注册到 Eureka 的 IP 是哪张网卡的地址。多网卡机器上,它可能选了 docker0 或内网隔离网段,导致 Portal 和客户端都连不上——这个细节不会报错,只会让整个链路静默失效。


















