标签:oca ram context search 存在 cal 集中 conf cli
微服务意味着要将单体应用中的业务拆分成一个个的子服务,这些服务都需要必要的配置信息才能运行,如果有上百个微服务,上百个配置文件,管理起来是非常困难的,这时候,一套集中式的、动态的配置管理中心是必不可少的,Spring Cloud 提供了 ConfigServer 来解决这个问题。
Spring Cloud Config 为微服务提供了集中化的外部配置支持,配置服务器为不同微服务应用的所有环境提供了一个中心化的外部配置。
Spring Cloud Config 分为服务端和客户端两部分。
Spring Cloud Config 默认使用 Git 来存储配置文件(也有其他方式,比如SVN、本地文件,但最推荐的还是 Git),而且使用的是 http/https 访问的形式
1、使用 GitHub 或其它代码库创建一个仓库 springcloud-config
,添加几个文件,创建一个 dev 分支
2、新建一个项目当作配置中心,添加 maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3、在application.yml
添加如下配置,配置自己的远程仓库地址,如果 ssh 无法连接可以尝试使用 https
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
# 远程库地址
uri: @*&%$%#$%
# 搜索目录
search-paths:
- springcloud-config
# 读取分支
label: master
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka
4、在主启动类上开启配置服务
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
public static void main(String[] args){
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
5、在浏览器输入如下地址可以访问到配置文件的信息
官网上介绍了如下几种访问方式:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中第一种方式返回的是 json 数据(如下图所示),其它方式返回的都是文件真正的内容
我们使用 bootstrap.yml 最为配置文件
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 配置的分离
1、添加 Maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、添加配置文件 bootstrap.yml
server:
port: 3355
spring:
application:
name: cloud-config-client
cloud:
config:
label: master #分支名
name: config #配置文件名
profile: test #配置文件后缀
uri: http://config3344.com:3344
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka
3、编写 controller,获取配置中心中的文件属性
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/info")
public String getConfigInfo(){
return configInfo;
}
}
4、浏览器输入地址访问
如果需要获取其它配置文件内容,只需要修改 bootstrap.yml
中的 label
、name
、profile
即可
当配置中心的配置文件内容发生改动,服务端和客户端是否能够动态的获取?
经测试,服务端可以动态的获取,客户端不能!
因为服务端直接从配置中心获取,而客户端是从上下文环境中获取已加载的属性,配置中心修改后,由于服务没有重启,获取的仍然是之前的属性。
对客户端进行修改
1、需要引入 actuator 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、添加如下配置
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
3、在 Controller 上添加注解 @RefreshScope
4、刷新服务端后,发送 Post 请求,curl -X POST http://localhost:3355/actuator/refresh
,客户端刷新即可获取最新内容,避免了服务重启
下一篇为大家介绍:Spring Cloud Bus 消息总线
标签:oca ram context search 存在 cal 集中 conf cli
原文地址:https://www.cnblogs.com/songjilong/p/12779686.html