SpringCloud(十三)——统一配置中心:config
Config组件简介
spring cloud config 为微服务架构中的微服务提供集中化的外部支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置。
config(配置)又称为 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。
spring cloud config 分为服务端和客户端两部分。
服务端也称为 分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密,解密信息等访问接口。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可用通过git客户端工具来方便的管理和访问配置内容。
spring cloud config 分布式配置中心能干嘛?
- 集中式管理配置文件
- 不同环境,不同配置,动态化的配置更新,分环境部署,比如 /dev /test /prod /beta /release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
- 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
- 将配置信息以REST接口的形式暴露
环境搭建
由于spring cloud config 默认使用git来存储配置文件 (也有其他方式,比如自持SVN 和本地文件),但是最推荐的还是git ,而且使用的是 http / https 访问的形式。
1、在码云上新建仓库
2、选择HTTPS连接,点击复制
3、新建一个config-server模块springcloud-config-server-3344
4、添加相关依赖
<dependencies>
<!--config server统一配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--加群1025684353一起吹水聊天-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
5、编写application.yaml配置文件
server:
port: 3344
spring:
application:
name: springcloud-config-server
# 连接码云远程仓库
#加群1025684353一起吹水聊天-->
cloud:
config:
server:
git:
# 注意是https的而不是ssh
uri: https://gitee.com/luoxiao1104/springcloud-config.git
# 通过 config-server可以连接到git,访问其中的资源以及配置~
default-label: master
6、编写主启动类
package com.study.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication_3344 {
public static void main(String[] args) {
//加群1025684353一起吹水聊天-->
SpringApplication.run(ConfigServerApplication_3344.class,args);
}
}
7、启动主启动类测试是否成功
Config客户端开发-远程连接
config client :微服务
1、新建一个config客户端模块springcloud-config-client-3355
2、导入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--加群1025684353一起吹水聊天-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
3、编写application.yaml配置文件
server:
port: 3355
spring:
application:
name: springcloud-config-client
#Eureka配置,服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-cofig-client-3355 #修改Eureka默认描述信息
#自定义一个属性
name: zhangsan
4、编写启动类
package com.study.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication_3355 {
public static void main(String[] args) {
//加群1025684353一起吹水聊天-->
SpringApplication.run(ConfigClientApplication_3355.class,args);
}
}
5、编写conroller测试
package com.study.springcloud.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${name}")
private String name;
//加群1025684353一起吹水聊天-->
@RequestMapping("/demo")
public String demo(){
log.info("demo ok!!!");
return "demo ok,name:"+name;
}
}
访问 http://localhost:3355/demo
在项目中,配置里面的属性(如name属性)可能会根据环境(开发环境,测试环境)不同,值也是不一样的。所以我们在springboot中可以配置多套环境
1、新建开发环境application-dev.yaml
name: zhangsan-dev
2、新建测试环境application-test.yaml
name: lisi-test
3、在修改主配置文件application.yaml
4、重新访问 http://localhost:3355/demo
把配置文件上传到远端仓库
6、在Gitee上新建文件
application.yaml配置文件
application-dev.yaml配置文件
application-test.yaml配置文件
3个文件
7、删除项目中的所有yaml配置文件
8、启动config服务springcloud-config-client-3344
9、访问localhost:3344/configclient-dev.yaml 获取配置环境,缓存到本地
查看控制台输出缓存的地址
10、在config客户端=springcloud-config-client-3355创建bootstrap.yaml配置文件
#config server地址
spring:
cloud:
config:
discovery:
#根据集群注册中心服务器id获取config sever,不要写死,建议在集群获取
service-id: SPRINGCLOUD-CONFIG-SERVER
#开启当前configclient 根据服务id去注册中心获取
enabled: true
#获取配置文件 1、分支 2、文件名 3、环境
label: master
name: configclient
profile: dev
#配置注册中心
#Eureka配置,服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-cofig-client-3355 #修改Eureka默认描述信息
11、启动测试
1、启动eureka集群springcloud-eureka-7001
2、启动config服务端springcloud-config-server-3344
3、启动config客户端springcloud-config-client-3355
4、更改bootstrap.yaml配置,重启3355
注意
config客户端配置如果使用application.yaml命名,会访问远程连接 http://localhost:8888 ,
application.yaml命名是用于已开发完成的项目
Config手动配置刷新
当远程git仓库中配置发生变化时,不需要重启微服务就可以直接读取远端修改之后的配置信息,这种就叫做手动配置刷新
1、在controller中添加@RefreshScope注解
2、在bootstrap.yaml配置文件中添加 端点暴露,重启。
3、修改远程配置文件
4、打开控制台输入curl -X POST http://localhost:3355/actuator/refresh