Spring Cloud Config刷新配置

分享知识 传递快乐

 

在日常开发中一般都是直接把相关配置放在单独的配置文件中,通常以 properties 或者 yml 的格式出现,但是这样的方式有个明显的问题,那就是当配置文件发生改变的时候,必须重启服务才能使得新的配置文件生效,否则配置无法生效。

Spring Cloud Config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。如图:

 

 

对于 Spring Cloud 来说就是通过 Config 来获取配置中心的配置信息来实现的。目前有一些用的比较多的开源的配置中心,比如携程的 Apollo、蚂蚁金服的 disconf 等。

 

 

配置文件文件规则


Spring Cloud Config遵循了一套文件命名规则,程序可以根据这些规则读取不同的配置文件。

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • {application}:就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件。
  • {profile}:就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。
  • {label}:表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。

注意:配置文件的文件名不是乱起的,Spring Cloud Config 有它的一套访问规则,我们通过这套规则在浏览器上访问。

如果配置文件的名称是 application.properties/application.yml,如果直接通过该名称访问是获取不到的,因为在配置文件名需要通过 “-” 来进行获取,如果配置文件名称没有 “-”,那么添加了 “-” 之后,会自动进行匹配搜索。

 

示例:

先在 github 中建立配置文件

config/config-client-dev.yml
config/config-client-prod.yml

配置文件的内容大致如下:

data:
    env: config-eureka-dev

创建服务端

1、新建 Spring Boot 项目,引入 以下配置:

<!-- SpringBoot整合Web组件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringCloud 整合 eureka 客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- SpringCloud 整合 config-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2、配置 config 相关的配置项

bootstrap.yml 文件

spring:
  cloud:
	config:
	  server:
		git:
		  uri: https://github.com/xxxxx/springcloud-config.git # 配置文件所在仓库
		  username:  # 登录账号
		  password:  # 登录密码
		  default-label: master # 配置文件分支
		  search-paths: config  # 配置文件所在根目录,仓库地址下的相对地址 多个用逗号","分割。
#      # 读取分支
#      label: master

# 服务注册到eureka地址
eureka:
  client:
	service-url:
	  defaultZone: http://127.0.0.1:7000/eureka
	register-with-eureka: true # 是否需要将自己注册到注册中心(注册中心集群需要设置为true),默认为true。因为自己是为注册中心,所以不需要自己注册自己
	fetch-registry: true # 是否需要搜索服务信息(是否启用注册服务信息),因为这是一个单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false;因为自己是为注册中心,不需要检索服务

application.yml 文件

server:
  port: 8888 # 指定服务端口

spring:
  application:
	name: config-server # 指定服务名称

3、在启动类中加入 @EnableConfigServer注解

 

创建客户端

1、新建 Spring Boot 项目,引入以下 jar

<!-- SpringBoot整合Web组件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--spring-cloud 整合 config客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- 手动刷新客户端配置依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、配置 config 相关的配置项

bootstrap.yml 文件

spring:
  profiles:
	active: dev # 获取配置的策略
  application:
	name:  config-client # 指定服务名称
  cloud:
	config:
	  profile: dev # 读取后缀(环境)
	  discovery:
		service-id: config-server # 指定配置中心的service-id,便于扩展为高可用配置集群
		enabled: true # 开启配置信息发现
	  label: master # 获取配置文件的分支,默认是master。如果是是本地获取的话,则无用。

#显示的暴露接入点
management:
  endpoints:
	web:
	  exposure:
		include: refresh,health,info

# 服务注册到eureka地址
eureka:
  client:
	service-url:
	  defaultZone: http://127.0.0.1:7000/eureka
	register-with-eureka: true # 是否需要将自己注册到注册中心(注册中心集群需要设置为true),默认为true。因为自己是为注册中心,所以不需要自己注册自己
	fetch-registry: true # 是否需要搜索服务信息(是否启用注册服务信息),因为这是一个单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false;因为自己是为注册中心,不需要检索服务

application.yml 文件

server:
  port: 8889 # 指定服务端口

另外还要在使用配置中心的类上添加 @RefreshScope 注解,没有此注解刷新是不生效的。当配置更改时,标有 @RefreshScope 的 Bean 将得到特殊处理来生效配置。

使用 POST 刷新 http://[IP]:[客户端端口]/actuat/refresh

 

 

 

 

 

 

 

 

—————————
如有不足请留言指正
相互学习,共同进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值