Config
概述
1、Spring Cloud Config 为分布式系统中的外部化配置提供服务器端和客户端支持
(1)服务端:分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器,并为客户端提供获取配置信息,加密 / 解密信息等访问接口
(2)客户端:通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动时从配置中心获取和加载配置信息,配置服务器默认采用 git 来存储配置信息,有助于对环境配置进行版本管理,并且可以通过 git 客户端工具来管理和访问配置内容
2、配置服务器
(1)集中管理所有环境中的应用程序的外部属性
(2)客户端和服务器上的概念与 Spring 环境和 PropertySource 抽象完全一致,因此它们非常适用于 Spring 应用程序,但也可用于以任何语言运行的任何应用程序
(3)当一个应用程序通过部署管道从开发到测试再到生产时,可以管理这些环境之间的配置,并确定应用程序在迁移时拥有运行所需的一切
(4)服务器存储后端的默认实现使用 git,很容易支持配置环境的标记版本,以及可用于管理内容的各种工具,容易添加其他的实现,并将它们与 Spring 配置一起插入
分布式配置中心(示例)
1、核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2、Spring Boot 启动类
(1)使用 @EnableConfigServer,该配置服务器可以嵌入到 Spring Boot 应用程序中
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
3、yaml 配置
server:
port: 3344
spring:
application:
name: spring-cloud-config-center
cloud:
config:
server:
git:
uri: https://gitee.com/java-mohan/springcloud-config.git
#仓库名
search-paths:
- springcloud-config
force-pull: true
# 如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写
# username: ********
# password: ********
#分支名
label: master
#省略注册配置
4、 每个库可以选择在子目录中存储配置文件,搜索这些目录的模式可以被指定为搜索路径
(1)服务器在顶层、foo/ 子目录、名称以 bar 开头的任何子目录中搜索配置文件
spring:
cloud:
config:
server:
git:
uri: https://github.com/spring-cloud-samples/config-repo
search-paths:
- foo
- bar*
5、配置文件访问规则
访问规则 | 示例 |
/{application}/{profile}[/{label}] | /config/dev/master |
/{application}-{profile}.{suffix} | /config-dev.yml |
/{label}/{application}-{profile}.{suffix} | /master/config-dev.yml |
(1){application}:应用名称,即配置文件的名称,例如:config-dev
(2){profile}:环境名,一个项目通常都有开发(dev)版本、测试(test)环境版本、生产(prod)环境版本,配置文件则以 application-{profile}.yml 的形式进行区分,例如 application-dev.yml、application-test.yml、application-prod.yml 等
(3){label}:Git 分支名,当访问默认分支下的配置文件时,该参数可以省略,即第二种访问方式
(4){suffix}:配置文件的后缀,例如 config-dev.yml 的后缀为 yml
6、默认标签
(1)Git 使用的默认标签是 main
(2)如果没有设置 spring.cloud.config.server.git.defaultLabel,并且一个名为 main 的分支不存在,配置服务器也会默认尝试检出一个名为 master 的分支
(3)如果想禁用后备分支行为,可以将 spring.cloud.config.server.git.tryMasterBranch 设置为 false
客户端(示例)
1、核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2、bootstrap.yaml
(1)applicaiton.yml:用户级的资源配置项;bootstrap.yml:系统级的资源配置项;bootstrap.yml 优先级高于 application.yml
(2)Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文
(3)初始化时,Bootstrap Context 负责从外部源加载配置属性并解析配置
(4)Bootstrap Context、Application Context 共享一个从外部获取的 Environment
(5)Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖
(6)Bootstrap Context、Application Context 约定不同,所以新增一个 bootstrap.yml 文件,保证分离 Bootstrap Context、Application Context 配置
server:
port: 3355
spring:
application:
name: spring-cloud-config-client
cloud:
config:
#分支名称
label: master
#配置文件名称,config-dev.yml中的config
name: config
#环境名(读取后缀名称),config-dev.yml中的dev
profile: dev
#Spring Cloud Config 服务端(配置中心)地址
uri: http://localhost:3344
#省略注册配置
3、业务类
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
4、动态刷新
(1)引入监控
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
(3)业务类添加 @RefreshScope
(4)需要发生 POST 请求到客户端刷新:curl -X POST "http://localhost:3355/actuator/refresh"
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战