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…

cas后端返回html直接跳转,CAS验证成功后不能跳转到登陆成功的主页面解决办法...

CAS验证成功后不能跳转到登陆成功的主页面现在部署了CAS,有一个应用,下载输入应用的URL可以正确跳转到CAS服务的登陆界面,登陆验证通过后页面却跳转到了应用的登陆界面&#xff0c;不能直接进入登陆成功的主页面&#xff01;应用的web.xml如下CASFilterorg.jasig.cas.client.au…

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;只要会讲普通话…

计算机二级web题目(1)--web基础

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1[单迭题] 下列关于Internet和Web的说法中,正确的是(B). A .Web就是Internet别称…

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…

ubuntu中mysql怎么退出命令_Ubuntu下MySQL简单操作

安装Ubuntu下安装常规软件都比较简单&#xff0c;直接使用apt-get即可。安装步骤如下&#xff1a;输入mysql命令系统会提示没有安装这个软件&#xff0c;如下图&#xff1a;根据系统提示&#xff0c;执行下面命令进行安装。$ sudo apt-get install mysql-client-core-5.6$ sudo…

虚拟现实技术利用计算机,虚拟现实技术在计算机专业教学中的应用思考

【摘要】虚拟现实技术在计算机教学中进行应用&#xff0c;其能够有效提高学生的学习兴趣&#xff0c;培养学生的探索能力和创新能力。本文对虚拟现实技术的概念和特点进行了阐述&#xff0c;并且分析了虚拟现实技术在计算机实践教学中的实践应用&#xff0c;从而有效提高计算机…

计算机二级web题目(2)--HTTP基础

1[单选题]HTTP协议是运行于&#xff08;C&#xff09;协议上的应用层协议。 A. FTP B. SMTP C.TCP D. UDP 解析&#xff1a;①传输控制协议TCP是传输层通信协议。 2[单选题] HTTP协议的消息有(B)两种类型。 A. 发送消息和接收消息 B. 请求消息和响应消息 C. 消息头和消息体 D. …

mpu 配置内存空间_PCIE的内存地址空间、I/O地址空间和配置地址空间

pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间首先区分一下IO空间和内存空间cpu会访问的设备一般有内存和外设寄存器&#xff0c;如下图所示。x86架构采用独立编址将内存操作与外设IO操作分开了才有了内存空间和IO空间的区分&#xff0c;x86平…

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

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

网络通信协议是计算机网络的组成部分之一,通信互联网技术考点精讲之计算机网络系统的组成...

下面是由希赛小编整理的通信互联网技术考点精讲之计算机网络系统的组成&#xff0c;希望能帮助学友们。具体内容如下&#xff1a;计算机网络系统的组成计算机网络通常由3部分组成&#xff1a;资源子网、通信子网和通信协议&#xff1f;(1)资源子网&#xff1a;是网络中实现资源…

centos安装llvm_Linux CentOS上编译并安装Clang教程

如何在Linux CentOS上编译并安装Clang&#xff1f;下面小编为大家具体的介绍一下&#xff0c;解决你在安装Clang遇到的一系列问题。一、Minimal版CentOS安装Clang前的环境准备1&#xff0c;安装gcc&#xff1a;yum install gcc2&#xff0c;安装g&#xff1a;yum install gcc-c…

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

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

双非计算机专业考研西安交通大学,2020双非一战计算机专硕初试403经验贴

本帖最后由 Johnsonw 于 2020-7-3 10:59 编辑先自我介绍一下&#xff0c;我初试403分&#xff0c;专业课134分&#xff0c;本科是双非&#xff0c;无项目经历&#xff0c;无科研经历&#xff0c;一战西安交通大学&#xff0c;最终成功上岸。初试&#xff1a;参考书目西安交通大…

计算机二级web题目(3)--HTML基础

1 [单选题] HTML是一种标记语言。它是由&#xff08;C&#xff09;解释执行的。 A. 不需要解释 B. Windows C. 浏览器 D. 标记语言处理软件 2 [单选题] 在HTML文档中用于表示页面标题的标记对是(D)。 A. <head></head> B. <header></header> C. <Ca…

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

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

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

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

计算机二级web题目(4)--CSS基础

1 [单选题] CSS指的是下列&#xff08;B&#xff09;的缩写。 A. Computer style Sheets B. Cascading style Sheets C. Creative stye Sheets D. Colerful siyle Sheets 2 [单选魃] 在HTML文档中,应该在下列哪个部分引用外部样式表?&#xff08;D&#xff09; A. 文档的末尾 …