image.png
什么是springcloud config
springcloud config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
怎么玩
- springcloud config 分为服务端和客户端两部分
- 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。
- 客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候来配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便地管理和访问配置内容。
功能
- 集中管理配置文件。
- 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/relase。
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置的信息。
- 当配置发生变动时,服务不再需要重启即可感知到配置的变化并应用新的配置。
- 将配置信息以REST接口的形式暴露。
服务端配置(服务端是一个注册在eureka的应用)
- 1 : pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- 2: application.yml
server:
port: 3344
spring:
application:
name: microservicecloud-config
cloud:
config:
server:
git:
uri: git@github.com:zzyybs/microservicecloud-config.git #GitHub上面的git仓库名字
- 3 : 启动主类添加:
@EnableConfigServer - 4 : 运维工程师在 git@github.com:zzyybs/microservicecloud-config.git上传了名为application.yml的文件
image.png
- 5 : config服务端启动后,敲url就可以直接拿到配置文件的信息
http://{config服务端:config服务端端口}/application-test/dev/prd.yml
image.png
客户端的配置
-
1:此时运维人员在github上传了microservicecloud-config-client.yml文件
image.png
-
2 :客户端项目创建bootstrap.yml
spring:
cloud:
config:
name: microservicecloud-config-client #需要从github上读取的资源名称,注意没有yml后缀名
profile: test #本次访问的配置项
label: master
uri: http://config-3344.com:3344 #本微服务启动后先去找3344号服务,通过SpringCloudConfig获取GitHub的服务地址
- application.yml是用户级的资源配置项
- bootstrap.yml是系统级的,优先级更高
- spring cloud会创建一个bootstrap context,作为spring应用的application context的父上下文。初始化的时候, bootstrap context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的environment.bootstrap属性有高优先级,默认情况下,它们不会被配置覆盖。bootstrap context 和 application context 有着不同约定。所以新增一个bootstrap.yml文件,保证bootstrap context 和 application context配置的分离。
- 3 : 此时application.yml的配置很少
spring:
application:
name: microservicecloud-config-client
- 4 : controller直接获取
@RestController
public class ConfigClientRest
{
@Value("${spring.application.name}")
private String applicationName;
@Value("${eureka.client.service-url.defaultZone}")
private String eurekaServers;
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String getConfig()
{
String str = "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
System.out.println("******str: " + str);
return "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
}
}












网友评论