一.SpringCloud config是什么? 简单来说,Spring Cloud Config就是能将各个 应用/系统/模块 的配置文件存放到统一的地方然后进行管理(Git 或者 SVN),客户端通过接口去获取这些配置文件。
SpringCloud config 为微服务架构中的微服务提供集中化的外部配置支持, 配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置
二.SpringCloud config怎么用? SpringCloud config 分服务端(Server)和客户端(Client)两部分
1.server提供配置文件的存储、以接口的形式将配置文件的内容提供出去 2.client通过接口获取数据、并依据此数据初始化自己的应用
三.配置中心的作用和好处
//统一管理配置, 快速切换各个环境的配置
在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、 各种环境下 配置信息的不同、配置信息修改之后实时生效等等, 传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求,如:
安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏 时效性:修改配置,需要重启服务才能生效 局限性:无法支持动态调整:例如日志开关、功能开关 //Springcloud提供了config组件来解决这种问题
四.搭建config-server项目
步骤: 1.使用Spring Initializr或(maven)创建SpringBoot项目 2.在启动类中贴上@EnableConfigServer注解 3.添加application.yml并设置相关的配置 4.在码云master分支上新建配置文件config-dev.yml 5.在码云xiaoliu分支上新建配置文件config-dev.yml 6.启动启动类 7.测试:http://config-3344.com:3344/master/config-dev.yml 请求路径读取规则:/{label}/{application}-{profile}.yml label:git 分支 application: 配置文件名,一般是服务名 profile: 环境 dev test prod等
pom.xml文件
<!--config服务端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!--eureka-server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>application.yml配置文件 注意如果自己的仓库是公共的就不需要配置 username:和 password:
server: port: 3344 spring: application: name: config-server #服务名 cloud: config: server: git: #在gitee中新建的仓库路径,注意是地址栏上的(克隆下来即可) uri: https://gitee.com/xxx/cloud-config ###搜索目录 search-paths: - springcloud-config #码云账号 username: wangyifei@qq.com #码云账号秘密 password: 123456 label: master eureka: client: #是否将自己注册进去eureka,false为不注册,true注册 registerWithEureka: true #是否从eureka抓取注册信息,单点无所谓,集群必须设置为true才能配合ribbon使用负载均衡 fetchRegistry: true serviceUrl: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版主启动
@SpringBootApplication @EnableConfigServer public class MainAppConfigCenter3344 { public static void main(String[] args) { SpringApplication.run(MainAppConfigCenter3344.class,args); } }五.分布式配置中心客户端
步骤: 1.在cloud-config-client-3355中添加config-client的依赖 添加客户端的依赖 org.springframework.cloud spring-cloud-config-client 2.修改对应服务的配置文件,把application.yml 改为 bootstrap.yml(bootstrap.yml优先级高于application.yml加载文件yml文件时先加载bootstrap.yml) 3.把其他配置都放入到git服务器期中管理 (修改码云上master分支的config-dev.yml)
pom.xml
<!--config客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!--eureka-server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>bootstrap.yml
server: port: 3355 spring: application: name: cloud-client cloud: #Config客户端配置 config: label: master #分支名称 name: config #配置文件名称 profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344//master/config-dev.yml uri: http://localhost:3344 #配置中心地址 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版主启动
@SpringBootApplication @EnableEurekaClient public class ConfigClientMain3355 { public static void main(String[] args) { SpringApplication.run(ConfigClientMain3355.class,args); } }controller
@RestController public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/configInfo") public String getConfigInfo(){ return configInfo; } }六.动态刷新
需要运维人员发送Post请求刷新3355 cmd进入输入以下命令
curl -X POST “http://localhost:3355/actuator/refresh” 然后可以实现不用重启3355得到信息
bootstarp.yml
server: port: 3355 spring: application: name: cloud-client cloud: #Config客户端配置 config: label: master #分支名称 name: config #配置文件名称 profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344//master/config-dev.yml uri: http://localhost:3344 #配置中心地址 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版 management: #暴露监控端口 endpoints: web: exposure: include: "*"controller加入@RefreshScope注解
@RestController @RefreshScope public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/configInfo") public String getConfigInfo(){ return configInfo; } }详见下一章Bus
七.小结
1.Spring Cloud Config就是将配置文件放到统一的位置管理(比如GitHub),客户端通过接口去获取这些配置文件 2.Spring Cloud Config分为服务端和客户端,服务端主要用于存储配置文件,提供接口, 客户端通过提供的接口获取配置文件数据,并通过此数据初始化当前应用 3.要将Client 模块下的application.yml 改成bootstrap.yml,这是很关键的, 因为bootstrap.yml是比application.yml先加载的,bootstrap.yml优先级高于application.yml 4.Config能统一管理配置,修改了配置文件,希望不用重启来动态刷新配置,配合Spring Cloud Bus 使用 5.服务端需要配置好远程仓库的地址 账号 和密码,并在远程仓库将配置文件建好