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 集中式配置相关推荐

  1. (十九)Alian 的 Spring Cloud Config 集群配置

    目录 一.简介 1.1.第一步 二.maven依赖 三.配置 3.1.application.properties 3.2.主类 四.客户端修改(支付系统) 4.1 maven依赖 4.2 支付系统主 ...

  2. Spring Cloud Config服务端配置细节(一)

    上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用,这里边还涉及到许多细节,本文我们就来看看服务端配置中的一些细节. 本文是Spring Cloud系列的第二十三篇文章,了解前二十 ...

  3. Spring Cloud Config服务端配置细节(二)之加密解密

    在微服务架构中,由于独立的服务个数众多,加上前期测试工作量大,一些原本由运维人员维护的敏感信息会被我们直接写在微服务中,以提高开发效率,但是这种明文存储方式显然是非常危险的,所以我们要对这些信息进行加 ...

  4. Go微服务 - 第八部分 - 使用Viper和Spring Cloud Config进行集中配置

    第八部分: Go微服务 - 使用Viper和Spring Cloud Config进行集中配置 在第八部分,我们探索Go微服务中使用Spring Cloud Config进行集中配置. 简介 考虑到微 ...

  5. 第十二章:Spring Cloud Config Server 的配置

    ###1.为什么要使用config 集中管理 不通环境不通配置 运行期间动态调整配置 自动刷新 ###2.用法入门 导入pom <dependency><groupId>org ...

  6. (十八)Alian 的 Spring Cloud Gateway 集群配置

    目录 一.简介 二.配置 三.配置文件 3.1.application.properties 四.主类 五.部署及配置 5.1.部署 5.2.Nginx配置 5.3.Spring Cloud Gate ...

  7. (十六)Alian 的 Spring Cloud Eureka 集群配置(主机名方式)

    目录 一.背景 二.maven依赖 三.主类 四.Eureka服务配置 五.启动服务 5.1 服务1效果图(eureka-server1.com) 5.2 服务2效果图(eureka-server2. ...

  8. (十七)Alian 的 Spring Cloud Eureka 集群配置(IP方式)

    目录 一.背景 二.maven依赖 三.Eureka服务主类 四.Eureka服务配置 五.启动服务 5.1 服务1效果图(10.130.3.66) 5.2 服务2效果图(10.130.3.111) ...

  9. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

最新文章

  1. $(document).ready(function() {})不执行的问题
  2. Spring Boot 多版本更新,紧急修复 RFD 安全漏洞
  3. [UE4]创建游戏、加入游戏
  4. linux 添加path环境变量中,在Linux里设置环境变量PATH的方法是什?
  5. 更快的Maven构建工具mvnd和Gradle哪个性能更好?
  6. 95-225-040-源码-广播-简介
  7. 第五章 Windows基础控件
  8. 【Python实例第28讲】核主成分
  9. centos 网络开启
  10. web前端顶岗实习总结报告_web前端年度工作总结范文
  11. c语言借阅管理题目内容描述,C语言-图书借阅管理系统
  12. 人工智能产品经理工作流程
  13. 使用arduino控制多个PCA968516路舵机控制板从而达到最多可以控制992个伺服舵机
  14. 美国小学计算机编程课程,美国小学STEM课程案例研究
  15. Codeforces Is your horseshoe on the other hoof?
  16. Spring和SpringMVC配置中父子WebApplicationContext的关系
  17. 玩游戏机械键盘什么牌子好, 我们聊聊Hyperx游戏机械键盘
  18. SCI论文论点陈述经验分享
  19. codeforces round#517
  20. 图片饱和度、色调、明度的计算

热门文章

  1. 解读eXtremeComponents代码结构--转载
  2. CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?...
  3. MyBatis 实践 -配置
  4. [原]五分钟搭建gitserver
  5. 浅谈压缩感知(三十一):压缩感知重构算法之定点连续法FPC
  6. python 脚本查看微信把你删除的好友--win系统版
  7. iOS正则匹配手机号
  8. [转载] iphone 很有意思的NSString 和 Autorelease
  9. 【疯狂积累CSS】2:利用@media screen实现网页布局的自适应
  10. Adam Optimization Algorithm