# spring-config-service **Repository Path**: HK-Poc/spring-config-service ## Basic Information - **Project Name**: spring-config-service - **Description**: 分布式统一配置中心 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-01-31 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spring-cloud-config SpringCloud 配置中心 ### 一、背景 随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错。配置中心便能很好的解决此类问题。 ### 二、简介 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。 ### 三、基础搭建 #### Server 端(独立部署) ##### 1、 配置 修改配置文件:$PWD/spring-cloud-config-server/src/main/resources/application.yml 此配置文件用来指定服务端从何处获取项目配置文件信息,根据实际情况修改。 ![](image/server端配置.png) #### 2、启动 进入目录:`cd $PWD/spring-cloud-config-server ` 执行脚本: ` sh startup-code.sh` #### 3、测试 使用浏览器访问 `http://${ip}:8011/config/dev` 成功会返回如下信息: ![](image/server端测试.png) 说明:请求地址`http://${ip}:8011/config/dev` 中的 `config/dev`对应的是配置文件的名称-节点。 例如`config/pro`请求获取的是config-pro.properties文件属性 ![](image/server端说明.png) #### Client 端(嵌入到业务系统,可以单独部署测试) ##### 1、配置 修改配置文件:$PWD/spring-cloud-config-server/src/main/resources/bootstrap.properties ![](image/client配置说明.png) ##### 2、启动 进入目录:`cd $PWD/spring-cloud-config-client ` 执行脚本: ` sh startup-code.sh` ##### 3、测试 使用浏览器访问 `http://${ip}:8012/hello` 成功会返回如下信息: ![](image/client测试.png) ##### 4、动态修改配置测试: 说明: 红色标记处注解表示此类中被spring管理(字段上有@value)的字段支持动态刷新 ![](image/client注解说明.png) 修改Git上配置文件后需要手动调用刷新接口 `http://${ip}:8012/refresh`才能生效 红色标记处如果为true,刷新接口将被拦截。 ![](image/client动态刷新配置说明.png) 修改Git上配置信息后使用浏览器访问`http://${ip}:8012/hello` 成功会返回修改后信息: ![](image/client测试2.png) Tips:可以将动态刷新接口配置到Git项目的WebHooks中,当有配置文件提交时自动触发接口调用 ![](image/WebHooks配置.png) ![](image/WebHooks配置2.png) ##### 5、Client端如何嵌入到业务系统 1).将POM文件依赖拷贝到业务系统POM文件中 2).将目录$PWD/spring-cloud-config-server/src/main/resources下配置文件拷贝到业务系统中 3).在需要从配置中心注入属性的字段上添加`@Value("${hello}")`(hello为配置文件中字段名) 4).如果需要支持动态刷新,在需要注入属性的类上添加注解`@RefreshScope` ### 四、高可用搭建 目前客户端都是直接调用配置中心的server端来获取配置文件信息。这样就存在一个问题,客户端和服务端的耦合性太高,如果server端要做集群,客户端只能通过原始的方式来路由,server端改变IP地址,客户端也需要修改配置,不符合springcloud服务治理的理念。 #####Server端改造 1、添加依赖 ``` org.springframework.cloud spring-cloud-config-server org.springframework.cloud spring-cloud-starter-eureka ``` 2、修改配置文件:$PWD/spring-cloud-config-server/src/main/resources/application.yml ![](image/高可用服务的配置.png) 3、启动类 启动类添加@EnableDiscoveryClient注解 ![](image/高可用启动类注解说明.png) #####Client端改造 1、添加依赖 ``` org.springframework.cloud spring-cloud-starter-config org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-test test ``` 2、修改配置文件:$PWD/spring-cloud-config-server/src/main/resources/bootstrap.properties ![](image/高可用客户端配置.png) 主要是去掉了spring.cloud.config.uri直接指向server端地址的配置,增加了最后的三个配置: spring.cloud.config.discovery.enabled :开启Config服务发现支持 spring.cloud.config.discovery.serviceId :指定server端的name,也就是server端spring.application.name的值 eureka.client.serviceUrl.defaultZone :指向配置中心的地址 这三个配置文件都需要放到bootstrap.properties的配置中 3、启动类 启动类添加@EnableDiscoveryClient注解 ![](image/高可用客户端启动类.png) ### 五、使用消息总线 参考文档:`$PWD/spring-cloud-config-bus/README.md`