前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于Git的Spring Cloud Config极速搭建

基于Git的Spring Cloud Config极速搭建

作者头像
翊君
发布于 2022-03-08 06:44:47
发布于 2022-03-08 06:44:47
46700
代码可运行
举报
文章被收录于专栏:周一电台周一电台
运行总次数:0
代码可运行

theme: smartblue

0.阅读完本文你将会学到

  • 如何基于Git搭建一个Spring Cloud Config服务器

1.概述

Spring Cloud Config是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,Client通过接口获取数据、并依据此数据初始化自己的应用。

这种配置管理方案在Git版本控制的加持下可以在应用运行时进行修改。虽然它非常适用于Spring应用程序,使用了所有支持的配置文件格式以及EnvironmentPropertySource@Value等,但它可以用于运行任何编程语言的任何环境。

在这篇文章中,我们将着重介绍一个例子,说明如何设置一个由Git支持的配置服务器,如何在一个简单的REST应用服务器中使用它。

2.项目设置和依赖性

首先我们先创建两个新的Maven项目。 Server项目依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Client项目依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.配置服务器的实现

应用程序的主要部分是一个配置类--更确切地说,就是@SpringBootApplication--它通过自动配置注解@EnableConfigServer引入所有需要的设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
    
    public static void main(String[] arguments) {
        SpringApplication.run(ConfigServer.class, arguments)}
}

现在我们需要配置服务器监听的端口和提供版本控制的配置内容的Git-url。后者可以使用http、ssh等协议或本地文件系统上的一个简单文件。

提示:如果你打算使用多个配置服务器实例指向同一个配置仓库,你可以配置服务器将你的版本克隆到本地临时文件夹。但要注意有双重验证的私有存储库,它们很难处理。在这种情况下,把它们克隆到你的本地文件系统上,然后用这个副本工作会更容易。

我们还需要在application.properties中为Basic-Authentication设置一个用户名和一个密码,以避免每次重启应用程序时自动生成密码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.port=8888
spring.cloud.config.server.git.uri=ssh://localhost/config-repo
spring.cloud.config.server.git.clone-on-start=true
spring.security.user.name=jayxu
spring.security.user.password=s3cr3t

4.作为配置存储的 Git 仓库

为了完成我们的服务器,我们必须在配置好的URL下初始化一个Git仓库,创建一些新的属性文件。

配置文件的名称像普通的application.properties一样组成,但是用配置的名称代替application,例如客户端的属性spring.application.name的值,后面加一个破折号和活动配置文件。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$> git init
$> echo 'user.role=Developer' > config-client-development.properties
$> echo 'user.role=User'      > config-client-production.properties
$> git add .
$> git commit -m 'Initial config-client properties'

提示:如果你遇到与ssh相关的认证问题,请仔细检查你的ssh服务器上的/.ssh/known_hosts和/.ssh/authorized_keys!

5.查询配置

现在我们能够启动我们的服务器了。我们的服务器所提供的基于Git的配置API可以通过以下路径进行查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

其中{label}占位符指的是一个Git分支,{application}指的是客户端的应用程序名称,{profile}指的是客户端当前的活动应用程序配置文件。

最后,我们可以通过下面的命令在master分支中的开发配置文件中为客户端获取配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$> curl http://jayxu:s3cr3t@localhost:8888/config-client/development/master

6.客户端实现

接下来,让我们来处理一下客户端的问题。这将是一个非常简单的客户端应用程序。

为了获取我们的服务器,配置必须放在application.properties文件中。Spring Boot 2.4引入了一种新的方式,使用spring.config.import属性来加载配置数据,现在这是绑定到配置服务器的默认方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@RestController
public class ConfigClient {
    
    @Value("${user.role}")
    private String role;

    public static void main(String[] args) {
        SpringApplication.run(ConfigClient.class, args);
    }

    @GetMapping(
      value = "/test/{username}",  
      produces = MediaType.TEXT_PLAIN_VALUE)
    public String test(@PathVariable("username") String username) {
        return String.format("Hello!
          You're %s and you'll become a(n) %s...\n", username, role);
    }
}

除了应用程序名称,我们还在application.properties中加入了活动配置文件和连接细节。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=config-client
spring.profiles.active=development
spring.config.import=optional:configserver:http://jayxu:s3cr3t@localhost:8888

这将连接到配置服务器http://localhost:8888,在启动连接时也将使用HTTP。我们还可以分别使用spring.cloud.config.usernamespring.cloud.config.password属性设置用户名和密码。

在某些情况下,如果一个服务无法连接到配置服务器,我们可能想让它的启动失败。我们可以去掉optional:前缀,使客户端停止运行。

为了测试,如果配置从我们的服务器正确接收,并且role被注入到我们的Controller方法中,我们只需在启动客户端后使用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$> curl http://localhost:8080/test/JayXu

如果响应如下,我们的Spring Cloud配置服务器及其客户端目前工作正常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello! You're JayXu and you'll become a(n) Developer...

8.结语

现在我们就可以创建一个配置服务器,从 Git 仓库向客户端应用程序提供一组配置文件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringCloud入门(6)Config
已经4天没有更新了,怎么说呢,就很忙,很忙,很忙。主要还是毕业以及从一个城市到另外一个城市的事情,这段时间尽最大可能保持2,3天一更,最晚不超过4,5天一更。
用户8902830
2021/08/12
3260
SpringCloud入门(6)Config
SpringCloud-微服务配置统一管理SpringCloud Config(七)
前言:对于应用,配制文件通常是放在项目中管理的,它可能有spring、mybatis、log等等各种各样的配置文件和属性文件,另外你还可能有开发环境、测试环境、生产环境等,这样的话就得一式三份,若是传统应用还好说,如果是微服务呢,这样不光配置文件有可能冗余而且量大,繁重复杂,不好维护,这样的话就需要一个配置文件的统一管理了。 一、SpringCloud Config简介   SpringCloud Config为分布式系统外部化配置提供了服务器端和客户端的支持,它包括ConfigServer和ConfigC
2018/06/27
8090
Spring-Cloud-config配置中心
解释: application: 配置文件的名字 profile:对应的环境 label:不同的分支
JokerDJ
2023/11/27
3150
Spring-Cloud-config配置中心
Spring Cloud Config
Spring Cloud Config 为微服务提供了集中化的外部配置支持,配置服务器为不同微服务应用的所有环境提供了一个中心化的外部配置。
灰太狼学Java
2022/06/17
6640
Spring Cloud Config:外部集中化配置管理
Spring Cloud Config 分为服务端和客户端两个部分。服务端被称为分布式配置中心,它是个独立的应用,可以从配置仓库获取配置信息并提供给客户端使用。客户端可以通过配置中心来获取配置信息,在启动时加载配置。Spring Cloud Config 的配置中心默认采用Git来存储配置信息,所以天然就支持配置信息的版本管理,并且可以使用Git客户端来方便地管理和访问配置信息。
macrozheng
2019/10/15
7300
SpringCloud之Config
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。
shaoshaossm
2022/12/27
2680
SpringCloud之Config
微服务(十一)——Config分布式配置中心&Bus消息总线
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。
不愿意做鱼的小鲸鱼
2022/09/26
8940
微服务(十一)——Config分布式配置中心&Bus消息总线
配置中心 - Spring Cloud Config
使用postman通过POST方法访问接口http://localhost:8080/actuator/refresh 注意:Spring Boot 2.x,是/actuator/refresh,而不是/refresh
十毛
2019/03/27
5010
配置中心 - Spring Cloud Config
spring-cloud-config + spring-cloud-bus实现动态刷新集群配置
安装 rabbitmq请移步:http://blog.csdn.net/red_sheeps/article/details/78386303 以下 demo代码详见:https://github.com/GloryXu/test-spring-boot
RedSheep
2019/10/11
1.1K0
spring-cloud-config + spring-cloud-bus实现动态刷新集群配置
Spring Cloud 之 Config与动态路由.
 Spring Cloud Confg 是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
JMCui
2019/07/28
7000
Spring Boot + Spring Cloud 构建微服务系统(九):配置中心(Spring Cloud Config)
如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多。此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启,运维也是苦不堪言,而且还很容易出错。于是,配置中心便由此应运而生了。
朝雨忆轻尘
2019/06/19
6100
Spring Boot + Spring Cloud 构建微服务系统(九):配置中心(Spring Cloud Config)
.NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置
  在分布式系统中,每一个功能模块都能拆分成一个独立的服务,一次请求的完成,可能会调用很多个服务协调来完成,为了方便服务配置文件统一管理,更易于部署、维护,所以就需要分布式配置中心组件了,在Spring Cloud中,就有这么一个分布式配置中心组件 — Spring Cloud Config。
Edison Zhou
2018/09/27
8770
.NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置
【Spring Cloud】009-Config
微服务意味着要将单体应用中的业务拆分成一个个子服务, 每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的, 动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,那上百的的配置文件要修改起来,岂不是要发疯!
訾博ZiBo
2025/01/06
760
【Spring Cloud】009-Config
「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config
「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务SpringCloud 」03 Eureka的自我保护机制 「 从0到1学习微服务SpringCloud 」04服务消费者Ribbon+RestTemplate 「 从0到1学习微服务SpringCloud 」05消费者Fegin
KEN DO EVERTHING
2019/03/30
1K0
Spring Cloud Config客户端配置细节
Spring Cloud Config服务端的配置小伙伴们应该都很熟悉了,本文我们主要来看看客户端配置的一些细节问题。 ---- 服务化配置中心 在前面几篇关于Spring Cloud Config配置中心的文章中,我们在config-client中配置config-server地址的时候都是直接将地址写死,这种方式显然不够灵活,有的小伙伴可能已经想到了,这里我们可以结合eureka注册中心,然后在配置的时候直接使用服务名即可,OK,那我们对之前的项目稍加改造吧。 config-server改造 这里的改造
江南一点雨
2018/04/02
1.2K0
Spring Cloud Config客户端配置细节
Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client,业界也有些知名的同类开源产品,比如百度的disconf。 相比较同类产品,SpringCloudConfig最大的优势是
程序员鹏磊
2018/02/09
8920
Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
SpringCloud详细教程 | 第七篇:分布式配置中心(Spring Cloud Config) (Greenwich版本)
Spring Cloud Config为分布式系统中的外部化配置提供服务器端和客户端支持。在分布式系统中,由于服务数量很多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中同时也可以存放在Mysql数据库。在spring cloud config 组件中,分两个角色,一是config server,二是config client
小东啊
2019/06/26
1.7K0
SpringCloud详细教程 | 第七篇:分布式配置中心(Spring Cloud Config) (Greenwich版本)
分布式配置中心Spring Cloud Config初窥
随着我们的分布式项目越来越大,我们可能需要将配置文件抽取出来单独管理,Spring Cloud Config对这种需求提供了支持。Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。我们可以使用Config Server在所有环境中管理应用程序的外部属性,Config Server也称为分布式配置中心,本质上它就是一个独立的微服务应用,用来连接配置仓库并将获取到的配置信息提供给客户端使用;客户端就是我们的各个微服务应用,我们在客户端上指定配置中心的位置,客户端在启动的时候就
江南一点雨
2018/04/02
5710
分布式配置中心Spring Cloud Config初窥
spring cloud 入门系列七:基于Git存储的分布式配置中心–Spring Cloud Config
我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config. 它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分。
全栈程序员站长
2022/07/18
4940
spring cloud 入门系列七:基于Git存储的分布式配置中心–Spring Cloud Config
13-SpringCloud Config
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。
彼岸舞
2021/09/06
3700
推荐阅读
相关推荐
SpringCloud入门(6)Config
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文