Spring Cloud配置–外部化应用程序配置

本教程是关于Spring Cloud Config的,这里我们将研究如何在不同的应用程序中针对不同的环境(例如开发人员,本地,产品等)使用Spring Cloud Config来管理和存储分布式外部配置属性。开发一个简单的云应用程序以使用云配置外部化应用程序配置属性,然后将同一应用程序扩展为使用发现服务器注册该应用程序,在运行时更新配置以及对敏感属性进行加密和解密。

在分布式云系统中,我们有许多较小的系统,它们共同构成一个较大的系统,因此,我们有多个配置文件。 举例来说,如果我们使用微服务,则每个微服务都将拥有自己的配置文件,并且由于可能运行多个实例并且这些配置管理面向部署,因此在该应用程序中管理该配置变得很麻烦,即使不错过它也具有挑战性。某些实例的任何配置更改。

为此,Spring Cloud团队提供了易于实施的Spring Cloud配置,它为分布式系统中的外部化配置提供了服务器和客户端支持。 使用Config Server,您可以集中管理所有环境中应用程序的外部属性

Spring cloud config是一个Web应用程序,它公开REST端点以访问配置属性,它支持JSON,属性和yaml等多种输出格式,它支持的不同后备存储为git(default),SVN,文件系统。 在我们的示例中,我们将使用git作为配置属性的后备存储。

设置Git支持的商店

首先,让我们建立我们的后备商店。 我们将使用github来存储我们的属性,为此,我在这里创建了一个简单的github项目来存储配置。 它基本上有3个.properties文件。 application.properties用于存储全局属性, spring-cloud-config-client.properties用于存储应用弹簧云配置客户端的全球性,同样我们有spring-cloud-config-client-local.properties存储本地属性对于应用程序spring-cloud-config-client

spring-cloud-config-client.properties

server.contextPath=spring-cloud-config-client
test.property=property from cloud config

spring-cloud-config-client-local.properties

test.local.property=test local property

本地属性文件将具有配置属性,以使用本地配置文件运行spring boot应用程序;如果要在本地环境中覆盖全局配置文件,例如DB属性,则可以定义全局配置文件的现有属性。

Spring Cloud Config Server实施

这将是一个简单的spring boot应用程序。 对于此实现,请首先从start.spring.io使用以下配置下载一个演示spring boot应用程序,我们将在本教程后面的部分中使用发现服务器配置。

现在将其导入IDE,您可以找到以下Maven配置。

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-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>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

让我们定义此应用程序的应用程序配置。 为了使我们的示例简单,我们现在没有与发现服务器相关的配置。以下是我们在上一节中讨论的git URL。

application.properties

server.port=8888
spring.cloud.config.server.git.uri=https://github.com/only2dhir/config-repo.git

以下是我们主要的Spring Boot应用程序的实现。 在简单注释上– @EnableConfigServer将启用spring cloud config所需的配置。 注意: –在运行此类之前,您可以在pom.xml中注释eureka依赖关系,以避免不必要的错误日志,因为我们现在尚未进行任何与发现服务器相关的配置。

package com.devglan.springcloudconfigexample;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication
@EnableConfigServer
public class SpringCloudConfigExampleApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudConfigExampleApplication.class, args);}
}

在类之上作为Java应用程序运行将暴露以下REST端点。

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

在这里,application是应用程序的名称。 例如,如果我们将客户端应用程序名称命名为spring-cloud-config-client,则端点URL变为spring-cloud-config-client-dev.properties,其中dev是spring boot活动配置文件。这里的标签是git brnach是可选参数。

Spring Cloud Config客户端实施

对于云配置客户端,我们需要以下依赖项。稍后需要doscovery客户端进行服务发现。 现在,spring-cloud-starter-config就足够了。

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</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>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

要使用客户端应用程序引导我们的Spring Cloud配置配置,我们需要bootstrap.yml以下条目。 以下配置将为应用名称spring-cloud-config-client和本地配置文件调用属性配置文件,并且我们的云配置服务器在http:// localhost:8888上运行

spring.application.name=spring-cloud-config-client
spring.profiles.active=local
spring.cloud.config.uri=http://localhost:8888

现在让我们定义我们的spring boot应用程序类。

SpringCloudConfigClientApplication.java

package com.devglan.springcloudconfigclient;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringCloudConfigClientApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudConfigClientApplication.class, args);}
}

现在,让我们定义我们的控制器类,并使用@Value注释通过Spring Cloud config使用外部属性。

DemoController.java

package com.devglan.springcloudconfigclient.controller;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 {@Value("${test.property}")private String testProperty;@Value("${test.local.property}")private String localTestProperty;@RequestMapping("/")public String test() {StringBuilder builder = new StringBuilder();builder.append("test property - ").append(testProperty).append(" ").append("local property - ").append(localTestProperty);return builder.toString();}
}

在属性文件中,我们定义了test.propertytest.local.property属性,将其注入到控制器中。在属性文件中,我们将server.contextPath定义为spring-cloud-config-client,因此我们的客户端应用程序将是可从http:// localhost:8080 / spring-cloud-config-client /访问

将服务发现与Spring Cloud Config集成

在上一篇文章中,我们使用spring-cloud-netflix-eureka创建了一个服务发现应用程序 。 我们将使用在默认端口8761上运行的同一发现服务器。要与发现服务器集成,让我们首先编辑服务应用程序的application.properties文件,以将自身注册为该服务器的服务。使用发现服务器将该应用程序注册为应用程序名称– spring-cloud-config-example

application.properties

spring.application.name=spring-cloud-config-example
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

使用@EnableDiscoveryClient注释SpringCloudConfigExampleApplication.java ,以便此应用程序向发现客户端注册自己。

此外,我们需要在客户端应用程序中配置相同的内容以使用发现服务器来发现配置服务器。为此,使用SpringCloudConfigClientApplication.java注释SpringCloudConfigClientApplication.java并在bootstrap.properties文件中进行以下条目以自动发现云配置服务。默认情况下,云配置客户端会在发现服务器中使用任何发现配置服务器查找名称为configserver的应用程序,但在我们的情况下,云配置服务器的应用名称为spring-cloud-config-example,因此在客户端中使用它来覆盖它属性spring.cloud.config.discovery.serviceId

bootstrap.properties

spring.application.name=spring-cloud-config-client
spring.profiles.active=local
#spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.discovery.enabled=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
spring.cloud.config.discovery.serviceId=spring-cloud-config-example

现在启动发现服务器,然后启动云配置服务器,再启动客户端应用程序,然后访问http:// localhost:8080 / spring-cloud-config-client / ,您可以期望获得与上述相同的结果。

因此,总之,首先启动发现服务器,这会将端点公开为http:// localhost:8761 / eureka以注册服务。 现在,当云配置服务器启动时,它将使用服务ID spring-cloud-config-example注册其自身,并将端点公开为http://192.168.1.6:8888/。 现在,当客户端启动时,它首先尝试解析配置属性。 为此,它使用发现服务器来发现服务ID为spring-cloud-config-example的配置服务器。 此后,解析基本URL,然后将/{application}-{profile}.properties附加到该URL并获取配置属性。 最终网址变为– http:// localhost:8888 / spring-cloud-config-client-local.properties

在运行时更新云配置

这是spring cloud config的一项很酷的功能,它可以在运行时更新配置属性,而无需重新启动应用程序。 例如,您可以更改日志级别。要在运行时更新云配置,可以在git项目中更改配置属性,然后推送到存储库。 然后,我们可以将Spring Boot执行器/refresh端点或/bus/refresh与spring cloud总线一起使用,或者将VCS + / monitor与spring-cloud-config-monitor和spring-cloud-bus一起使用。 但是这样做不会刷新用@Value或@Bean注释的属性,因为这些属性是在应用程序启动期间初始化的。 为了刷新这些属性,spring提供了@RefreshScope批注。我们将在下一篇文章中通过一个示例实现这一点– 运行时的Spring cloud config refresh属性

加密和解密敏感配置

这是spring cloud config所提供的另一个有用功能。数据库密码,用户名等配置是敏感配置,为此加密和解密spring提供了很多功能,例如REST或飞行中的加密配置。使用对称和非对称密钥进行加密和解密。 我们将在下一个教程中创建一个示例应用程序,其中包含有关此主题的示例。以下是一个示例应用程序.properties具有加密的配置。这是加密和解密敏感配置的完整配置

application.properties

spring.datasource.username=root
spring.datasource.password={cipher}ABCFGVH75858GFHDRT

结论

在本教程中,我们了解了Spring Cloud配置。 我们创建了我们的云配置服务器,客户端和发现服务器以注册该服务。可以从此处下载源。如果您有任何要添加或共享的内容,请在下面的评论部分中进行共享。

翻译自: https://www.javacodegeeks.com/2018/03/spring-cloud-configuration-externalize-application-configuration.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入法问题_「图」KB4515384再爆新问题:OOBE时中文输入法阻止创建本地账户

KB4515384可谓是近期BUG数量最多的累积更新了&#xff0c;继开始菜单出现严重错误、音频故障、网络适配器问题、PIN登陆系统无法使用之后&#xff0c;在支持文档中微软承认了在初次设置(OOBE)过程中&#xff0c;使用某些语言将会阻止用户创建本地账户。微软在支持文档中表示&am…

FPGA(0)--quartusⅡ安装

微信公众号&#xff1a;创享日记 发送&#xff1a;quartus 获取软件安装包等 &#xff08;假设光盘驱动器号为 E&#xff0c; 所有软件安装到 D 分区&#xff09; 1.运行e:\QuartusII9.0 \ isetup.exe&#xff0c;直接点击“next”,一直到完成安装 2.设安装路径和目录为&#…

中文转化成拼音_五笔已经淘汰,拼音到达瓶颈,百度重拳出击,全新输入方式来袭!...

不知道大家发现没有&#xff0c;中文输入法的发展历程&#xff0c;其实就是通过建立云词库&#xff0c;改进词汇&#xff0c;发展AI技术来改善拼音输入法的识别率&#xff0c;进而取代五笔输入法的过程。拼音取代五笔&#xff0c;根本原因是易用好学&#xff0c;只要会讲普通话…

html属性和dom属性的区别,HTML属性与DOM属性的区别?

RTBTW&#xff0c;这样的文章我还是没有读懂http://www.cnblogs.com/tomkillua/archive/2012/08/15/2639420.html对于浏览器引擎而言&#xff0c;并不存在“HTML标签”这回事。其本质是DOM节点对象。也并不存在“HTML文档”这回事&#xff0c;其本质是DOM节点对象组成的文档树。…

java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

java泛型方法 通配符泛型是Java编程的核心功能之一&#xff0c;它是Java 5中引入的。如果您使用的是Java Collections &#xff0c;并且版本5或更高版本&#xff0c;则可以肯定使用了它。 将泛型与集合类一起使用非常容易&#xff0c;但是它提供了比仅创建集合类型更多的功能&a…

如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证

在上一篇文章中&#xff0c;我向您展示了如何在Java应用程序中启用Spring安全性 &#xff0c;今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 。 如果您使用的是Spring Security 3.1或更低版本&#xff0c;我将向您展示如何同时使用Java配…

win10下JDK环境变量配置与IDEA开发工具清晰简洁步骤,迈出Java学习第一步

文章目录一、JDK下载二、win10下环境变量配置三、开发工具IDEA安装一、JDK下载 可以直接去官网下载&#xff0c;推荐下载JDK8.0版本 也可以这个网盘里面找一下下载&#xff1a;Windows下JDK8.0 提取码&#xff1a;0909 安装的时候建议jdk和jre都。 二、win10下环境变量配置 …

连不上机器判断机器状态_KUKA机器人为什么KPP故障联不上,断电重启hou报RDC连接连接不上...

1.RDC连不上出现的现象: 通过指示灯的判断是最简单快捷的,如果是坏了可以直接提示RDC的故障,如果灯不亮可直接判断是RDC坏了或者是线没连上.如果RDC卡连不上,指示是不亮的!那么KSP或KPP网络断,同样会引起RDC不能读取数据,这是问什么呢?表面上看在KCB总线中KSP与KPP是串行连接的…

分布式部署_业务模块化打造单体和分布式部署同步支持方案

我在2019年中国.NET开发者峰会上为大家分享了我们的微服务电商安全工程实践&#xff0c;那次会议分享的高清录播已经上传到我的腾讯课堂&#xff0c;大家可以通过底部的小程序打开直接观看(复习)。在大会上跟大家提到&#xff0c;我们当时只有4个人的创业团队。追求的是一个既可…

html文字依次显示,利用定时器和css3动画制作文字依次渐变显示的效果

如上图&#xff0c;这种效果看着是不是挺“柔”的附代码文字一次渐变出现body{background-color: #333333;padding: 20px;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;}div,span{color: #ffffff;font-size: 30px;}.hidden{display: no…

面向Java程序员的20大Spring REST面试问题答案

大家好&#xff0c;过去两周来&#xff0c;我一直在与Spring教程共享一些REST&#xff0c;今天&#xff0c;我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST面试问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web Services的最受欢迎的…

你还认识变量吗?Java基础学习不可略过的基本语法,简而不漏,变量的定义赋值和分类,系统认识Java中的变量有哪些?

文章目录变量的声明和赋值变量分类变量的声明和赋值 class VariableTest{public static void main(String[] args) {//变量的定义int myAge 21;//变量的使用System.out.println(myAge);//变量的声明int myNumber;//变量的赋值myNumber 9090;} }特别注意&#xff1a; ①定义变…

地图统计_庄园地图“出镜率”排名,500场数据统计,红教堂第一

在11赛季的时候很多玩家都私信趣游君&#xff0c;他们感觉自己排位经常会遇到一些让人讨厌的地图&#xff0c;也是因为经常遇到这些地图&#xff0c;所以导致自己的排位赛迟迟无法上分&#xff0c;因为要求我们做一下地图出镜率的排名。为了完成这个刷剧统计&#xff0c;趣游君…

2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...

2018年计算机等一级考试试题100题及参考答案.docx文档编号&#xff1a;395397文档页数&#xff1a;14上传时间&#xff1a; 2018-09-03文档级别&#xff1a;精品资源文档类型&#xff1a;docx文档大小&#xff1a;28.84KB2018 年 计算机等一级考试试题 100 题 及参考答案 1. 在…

简自动类型提升,精度损失类型强制转换,常用转义字符,简单帮你回顾Java基本数据类型整形浮点型字符型布尔型Boolean及其运算规则

文章目录整形浮点型字符型布尔型boolean自动类型提升强制类型转换注意整形 bit是计算机中的最小存储单位。 byte是计算机中的基本存储单元。 1MB1024KB——1KB1024B&#xff08;byte&#xff09; public class JavaTest {public static void main(String[] args) {byte b1 1…

linux posix 线程池_linux多线程--POSIX Threads Programming

linux多线程自己从接触很久也有不少实践&#xff0c;但总是觉得理解不够深刻&#xff0c;不够系统。借这篇文章试着再次系统学习一下linux多线程编程&#xff0c;理解编程的concept&#xff0c;细致看一下POSIX pthread API的实现。还是凭借强大的google search&#xff0c;找到…

计算机相关货品类别,工业计算机的种类以及产品供应链

(文章来源&#xff1a;OFweek)因为工业计算机几乎是针对某种特定需求而生&#xff0c;它的型态可说是五花八门&#xff0c;如果要简单做个分类&#xff0c;可以工业计算机的类型与层级来区分。大致上有板卡、子系统与系统整合解决方案三种。板卡&#xff1a;又有单板计算机(Sin…

Java基本语法(6)--算术运算符

除号&#xff08;/&#xff09;要注意的是除数与被除数的数据类型。如果都是整型&#xff0c;那么结果还是一个整型&#xff0c;因此结果相当于是取整&#xff1b;如果至少有一浮点型&#xff0c;那么结果是浮点型&#xff0c;也就可以除到完整彻底&#xff0c;带小数点的。 前…

soapui 证书_SoapUI入门之附件上传和配置Https请求

已经欠了一堆的作业了&#xff0c;吼吼~拖延症是个大bug&#xff0c;废话不多说&#xff0c;马上进入咱们SoapUI的学习中来吧~现在开始我们的SoapUI集成测试学习之道&#xff1a;一、如何使用SoapUI进行附件上传做人还是不能这样&#xff0c;这不欺负银嘛。首先&#xff0c;我们…

pptv手机端html,影视资源持续更新,PPTV手机化身看片神器

移动终端的快速发展为人们的生活带来了多元化的娱乐享受&#xff0c;用手机观赏电影逐渐成为人们放松身心的重要选择之一。虽然在手机品牌呈井喷发展的态势下&#xff0c;支持观影的智能手机不在少数&#xff0c;要想突出重围&#xff0c;仅仅在硬件配置上做文章是远远不够的&a…