spring cloud config 通过将配置集中存于 git 仓库并由 config server 统一管理,实现微服务配置的动态刷新与环境隔离;client 通过 bootstrap.yml 连接 server,配合 @refreshscope 和 spring cloud bus 实现配置实时生效。

Spring Cloud Config 实现分布式配置统一中心,核心是把原本散落在各微服务中的 application.yml 或 application.properties 提出来,集中存到 Git 仓库,再由统一的 Config Server 对外提供服务,各微服务作为 Client 去拉取并按需刷新。整个过程不依赖重启,环境隔离清晰,运维和开发协作更高效。
配置文件统一存到 Git 仓库
这是整个方案的基础。所有配置不再放在服务本地,而是提交到远程 Git(如 Gitee、GitHub 或私有 GitLab):
- 命名规范严格:
{service-name}-{profile}.yml,例如order-service-prod.yml、user-service-dev.yml - 目录结构建议分层:按服务名建文件夹(
order-service/),再按环境建子目录(dev/、prod/),便于权限和 CI/CD 管控 - 支持公共配置:用
application.yml存放所有服务共用项(如日志格式、通用中间件地址),会被自动合并进各服务配置 - 敏感信息可加密:用
{cipher}前缀 + 配置密钥(encrypt.key),Git 中存密文,Server 解密后返回明文给 Client
搭建 Config Server 服务端
单独起一个 Spring Boot 应用,作为配置的“总出口”:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 加依赖:
spring-cloud-config-server和消息总线(如spring-cloud-starter-bus-kafka,用于后续广播刷新) - 启动类加注解:
@EnableConfigServer -
application.yml中指定 Git 地址和搜索路径:spring:<br> cloud:<br> config:<br> server:<br> git:<br> uri: https://gitee.com/yourname/config-repo.git<br> search-paths: "{application}" - 启动后访问
http://localhost:8888/order-service/prod就能直接看到解析后的 YAML 内容,说明 Server 已连通仓库
微服务接入 Config Client
每个微服务要变成“配置消费者”,关键在初始化阶段就连接 Server:
- 引入依赖:
spring-cloud-starter-config(注意不是config-server) - 新增
bootstrap.yml(必须,早于application.yml加载):spring:<br> application:<br> name: order-service<br> cloud:<br> config:<br> uri: http://localhost:8888<br> profile: prod<br> label: main
- 启动时自动从 Server 拉取
order-service-prod.yml,并绑定到@Value、@ConfigurationProperties等注解上 - 若需运行时更新配置,对 Bean 加
@RefreshScope,再调用/actuator/refresh(或通过 Bus 广播触发)
让配置变更真正“实时生效”
只改 Git 文件还不够,Client 必须感知变化并重载:
- 手动刷新:Client 加
spring-boot-starter-actuator,开放/actuator/refresh端点,发 POST 请求即可刷新当前实例 - 自动广播刷新(推荐):集成 Spring Cloud Bus(如 Kafka 或 RabbitMQ),Server 收到 Git webhook 或调用
/actuator/bus-refresh后,向所有订阅服务发送事件,各 Client 自动拉新配置 - Git Webhook 配合:在 Gitee/GitHub 设置推送地址为
http://config-server:8888/actuator/bus-refresh,代码一提交就全量生效 - 注意:只有
@RefreshScope标记的 Bean 才会重建,普通单例 Bean 不受影响,设计时需提前规划作用域
不复杂但容易忽略:Client 的 bootstrap.yml 是硬性要求,不能写在 application.yml 里;Git 分支(label)、环境(profile)、服务名(application)三者共同决定最终加载哪份配置,缺一不可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










