Spring Cloud Config 集中式配置
2019独角兽企业重金招聘Python工程师标准>>>
本指南通过Spring cloud config服务器引导你建立和消费配置。
你要构建什么?
你需要设置一个config服务器,然后创建一个在启动时消费配置的client,并且不需要重启client刷新配置。
你需要什么?
大约15分钟时间
你喜好的文本编辑器或IDE
JDK1.8以上
Gradle4+或Maven3.2+
如何完成本指南?
用Maven构建
首先你要设置一个基本的构建脚本。你可以使用任何你喜欢的构建系统来构建spring应用。
创建目录结构
在你选择的项目目录里,创建下面子目录结构,例如,在*nix 系统中使用命令 :
mkdir -p src/main/java/hello
└── src└── main└── java└── hello
为了快速地开始,这里已经做好了服务器和客户端应用的配置
configuration-service/pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>configuration-service</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
configuration-client/pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>configuration-client</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
建立一个Config 服务器
你首先需要一个作为Spring应用之间媒介的Config服务器和一个配置文件的版本控制仓库。
你可以使用Spring Cloud的@EnableConfigServer注解去建立一个能够和其他应用对话的Config服务器。
这是一个常规的Spring boot应用程序,添加一个注解来启用config服务器。
configuration-service/src/main/java/hello/ConfigServiceApplication.java
package hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer@SpringBootApplicationpublic class ConfigServiceApplication {public static void main(String[] args) {SpringApplication.run(ConfigServiceApplication.class, args);}}
Config服务器需要知道管理哪个仓库。
这里有几个选择,但是我们将使用基于Git的文件系统仓库。
你可以简单的把Config服务器指向Github或者GitLab仓库。
在文件系统里,创建一个新的目录,用git init初始化它。
然后添加一个a-bootiful-client.properties文件到Git仓库。
还要保证用git commit 来提交它。之后,你可以用Spring Boot应用连接到Config服务器,将Spring boot 应用的spring.application.name属性标识为a-bootiful-client。
这是Config服务器知道如何将配置的设置发送到具体客户端的关键。
它还将发送所有在Git仓库里的application.properties或者application.yml文件里的全部配置值。
在特殊名称的文件中的属性键(像a-bootiful-client.properties)会覆盖application.properties或者application.yml的对应值。
添加一个简单的属性和值,message = Hello world到新创建的a-bootiful-client.propertie文件,然后git commit 修改它。
通过在configuration-service/src/main/resources/application.properties的属性spring.cloud.config.server.git.uri 指定Git仓库的路径。
当你在同一台机子上运行本项目和其他的Spring boot 应用的时候,确保server.port也指定了不同的端口值,以免端口冲突。
configuration-service/src/main/resources/application.properties
server.port=8888spring.cloud.config.server.git.uri=${HOME}/Desktop/config
在本例中,我们使用基于文件的位于${HOME}/Desktop/config的git仓库,你可以通过创建一个新的目录,很容易的用
git 提交一个properties 和YAML 文件
$ cd ~/Desktop/config$ find ../.git...
./application.yml
或者使用一个远程的git仓库,例如 github,如果你改变了应用的配置文件,改为指向该文件代替。
Config客户端从Config服务器读取配置文件
现在我们已经创建了Config服务器,让我们创建一个新的Spring boot应用,使用Config服务器加载它自己的配置。不用重启JVM 去刷新其配置以按需反映对配置服务器的更改。为了连接到Config服务器,需要添加org.springframework.cloud:spring-cloud-starter-config依赖。
Spring 能看得配置属性文件,就像从自己的application.properties 或 application.yml 或其他PropertySource 文件一样加载任何属性
Config客户端的配置属性需要从Config服务器读取应用配置的其他内容前能够读取,在启动阶段,指定客户端的spring.application.name为
a-bootiful-client。在configuration-client/src/main/resources/bootstrap.properties用spring.cloud.config.uri指定Config服务器的位置,这个文件比其他配置文件更早加载。
configuration-client/src/main/resources/bootstrap.properties
spring.application.name=a-bootiful-client# N.B. this is the default:spring.cloud.config.uri=http://localhost:8888
我们还想启动refresh端点,以此我们可以演示动态改变配置:
configuration-client/src/main/resources/application.properties
management.endpoints.web.exposure.include=*
客户端可以使用传统的机制(例如:@ConfigurationProperties, @Value(“${…}”)或者通过Environment 抽象)访问位于Config服务器的任何值。
创建一个 Spring MVC REST controller,返回解析的message的属性值
默认情况下,在客户端启动的时候读取了配置值,并且不再读取。你可以强制一个bean去refresh配置-从Config服务器拉取更新的值-通过在
MessageRestController添加Spring Cloud Config的@RefreshScope注解,去触发一个refresh事件。
configuration-client/src/main/java/hello/ConfigClientApplication.java
package hello;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplicationpublic class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}}@RefreshScope@RestControllerclass MessageRestController {@Value("${message:Hello default}")private String message;@RequestMapping("/message")String getMessage() {return this.message;}}
测试这个应用
首先启动Config服务器,加载完成后,启动客户端。
在浏览器打开
http://localhost:8080/message
访问客户端应用,你应该可以看到响应反射的Hello world字符串。
把位于Git仓库的a-bootiful-client.properties文件的message 改为不同的值。你可以通过访问
http://localhost:8888/a-bootiful-client/default
来确认Config服务器看到了此更改。
你需要调用Spring Boot Actuator端点refresh,强制客户端刷新并且更新新的值。
Spring Boot’s Actuator 暴露了操作端点,像跟应用有关的健康检查和环境信息。
为了使用Actuator,需要在客户端的CLASSPATH 添加
org.springframework.boot:spring-boot-starter-actuator
。
你可以通过向client的refresh端点发送一个空的HTTP POST请求,调用refresh Actuator端点
http://localhost:8080/actuator/refresh,然后通过检查
http://localhost:8080/message
端点来确认它是否生效。
$ curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"
总结
恭喜你,刚刚通过创建一个服务器,然后动态更新配置,为你的所有服务提供了Spring的集中式配置。
原文地址:https://spring.io/guides/gs/centralized-configuration/
转载于:https://my.oschina.net/benz001/blog/2991851
Spring Cloud Config 集中式配置相关推荐
- (十九)Alian 的 Spring Cloud Config 集群配置
目录 一.简介 1.1.第一步 二.maven依赖 三.配置 3.1.application.properties 3.2.主类 四.客户端修改(支付系统) 4.1 maven依赖 4.2 支付系统主 ...
- Spring Cloud Config服务端配置细节(一)
上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用,这里边还涉及到许多细节,本文我们就来看看服务端配置中的一些细节. 本文是Spring Cloud系列的第二十三篇文章,了解前二十 ...
- Spring Cloud Config服务端配置细节(二)之加密解密
在微服务架构中,由于独立的服务个数众多,加上前期测试工作量大,一些原本由运维人员维护的敏感信息会被我们直接写在微服务中,以提高开发效率,但是这种明文存储方式显然是非常危险的,所以我们要对这些信息进行加 ...
- Go微服务 - 第八部分 - 使用Viper和Spring Cloud Config进行集中配置
第八部分: Go微服务 - 使用Viper和Spring Cloud Config进行集中配置 在第八部分,我们探索Go微服务中使用Spring Cloud Config进行集中配置. 简介 考虑到微 ...
- 第十二章:Spring Cloud Config Server 的配置
###1.为什么要使用config 集中管理 不通环境不通配置 运行期间动态调整配置 自动刷新 ###2.用法入门 导入pom <dependency><groupId>org ...
- (十八)Alian 的 Spring Cloud Gateway 集群配置
目录 一.简介 二.配置 三.配置文件 3.1.application.properties 四.主类 五.部署及配置 5.1.部署 5.2.Nginx配置 5.3.Spring Cloud Gate ...
- (十六)Alian 的 Spring Cloud Eureka 集群配置(主机名方式)
目录 一.背景 二.maven依赖 三.主类 四.Eureka服务配置 五.启动服务 5.1 服务1效果图(eureka-server1.com) 5.2 服务2效果图(eureka-server2. ...
- (十七)Alian 的 Spring Cloud Eureka 集群配置(IP方式)
目录 一.背景 二.maven依赖 三.Eureka服务主类 四.Eureka服务配置 五.启动服务 5.1 服务1效果图(10.130.3.66) 5.2 服务2效果图(10.130.3.111) ...
- 第十二章 Spring Cloud Config 统一配置中心详解
目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...
最新文章
- $(document).ready(function() {})不执行的问题
- Spring Boot 多版本更新,紧急修复 RFD 安全漏洞
- [UE4]创建游戏、加入游戏
- linux 添加path环境变量中,在Linux里设置环境变量PATH的方法是什?
- 更快的Maven构建工具mvnd和Gradle哪个性能更好?
- 95-225-040-源码-广播-简介
- 第五章 Windows基础控件
- 【Python实例第28讲】核主成分
- centos 网络开启
- web前端顶岗实习总结报告_web前端年度工作总结范文
- c语言借阅管理题目内容描述,C语言-图书借阅管理系统
- 人工智能产品经理工作流程
- 使用arduino控制多个PCA968516路舵机控制板从而达到最多可以控制992个伺服舵机
- 美国小学计算机编程课程,美国小学STEM课程案例研究
- Codeforces Is your horseshoe on the other hoof?
- Spring和SpringMVC配置中父子WebApplicationContext的关系
- 玩游戏机械键盘什么牌子好, 我们聊聊Hyperx游戏机械键盘
- SCI论文论点陈述经验分享
- codeforces round#517
- 图片饱和度、色调、明度的计算
热门文章
- 解读eXtremeComponents代码结构--转载
- CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?...
- MyBatis 实践 -配置
- [原]五分钟搭建gitserver
- 浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC
- python 脚本查看微信把你删除的好友--win系统版
- iOS正则匹配手机号
- [转载] iphone 很有意思的NSString 和 Autorelease
- 【疯狂积累CSS】2:利用@media screen实现网页布局的自适应
- Adam Optimization Algorithm