详解spring cloud config整合gitlab搭建分布式的配置中心

网友投稿 632 2023-02-26


详解spring cloud config整合gitlab搭建分布式的配置中心

在前面的博客中,我们都是将配置文件放在各自的服务中,但是这样做有一个缺点,一旦配置修改了,那么我们就必须停机,然后修改配置文件后再进行上线,服务少的话,这样做还无可厚非,但是如果是成百上千的服务了,这个时候,就需要用到分布式的配置管理了。而spring cloud config正是用来解决这个问题而生的。下面就结合gitlab来实现分布式配置中心的搭建。spring cloud config配置中心由server端和client端组成,

前提:在gitlab中的工程下新建一个配置文件configserver-dev.properties

一、配置Server

1、添加依赖

org.springframework.cloud

spring-cloud-config-server

2、在Application主类开启支持

@EnableConfigServer

3、配置application.yml文件

server:

port: 8888

spring:

application:

name: config

cloud:

config:

server:

git:

uri: https://gitlab.xxx.com/xxxxx/xxxxx.git # 配置gitlab仓库的地址,注意,此处必须以.git结尾

search-paths: /config-repo # gitlab仓库地址下的相对地址,可以配置多个,用,分割。

username: your username # gitlab仓库的账号

password: your password # gitlab仓库的密码

注意:如果配置文件放置在Git存储库的根目http://录下,则无需使用searchPaths参数,本例中的配置文件在config-repo目录中,因此使用searchPaths参数提示Config服务器搜索config-repo子目录

4、启动server,并在浏览器输入http://localhost:8888/configserver/dev/master

{

"name": "configserver",

"profiles": [

"dev"

],

"label": "master",

"version": "073cda9ce85a3eed00e406f4ebcc4651ee4d9b19",

"state": null,

"propertySources": [

{

"name": "https://gitlab.xxx.com/xxxxx/xxxxx/project/config-repo/configserver.properties",

"source": {

"name": "chhliuxyh",

"hello": "i'm the king of the world!!!",

"profile": "profile-default"

}

}

]

}

可以看到server端已经可以从gitlab上读取到配置文件了。可以通过如下表单中的方式访问gitlab上的资源

/{application}/{profile}[/{label}]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

例如在浏览器中输入:http://localhost:8888/configserver-dev.yml,结果如下:

hello: i'm the king of the world!!!

name: chhliuxyh

profile: profile-default

二、配置客户端

1、添加pom依赖

org.springframework.cloud

spring-cloud-starter-config

org.springframework.boot

spring-boot-starter-web

2、配置bootstrap.yml文件

注意:此处的配置文件需要放在bootstrap.properties或者是bootstrap.yml文件中,因为config的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties

server:

port: 8889

spring:

application:

name: configserver # 必须与配置文件的前缀一致,例如此处我们的配置文件名是configserver-dev.properties,则此处需配置成configserver

cloud:

config:

uri: http://localhost:8888/ //配置spring cloud config服务端的url

profile: dev # 指定profile

label: master # 指定gitlab仓库的分支

3、验证客户端

在客户端新增一个Controller

package com.chhliu.springcloud.config;

import org.springframework.beans.factory.annotalHkLlwxetion.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.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication

@RestController

@RefreshScope //注解@RefreshScope指示Config客户端在服务器配置改变时,也刷新注入的属性值

public class SpringcloudConfigClientApplication {

public static void main(String[] args) {

SpringApplication.run(SpringcloudConfigClientApplication.class, args);

}

@Value("${hello}") // 读取gitlab配置文件中的属性,如果我们读取到了值,说明客户端是OK的

private String profile;

@GetMapping("/hello")

public String hello() {

return this.profile;

}

}

在浏览器中访问:http://localhost:8889/hello,结果如下:

i'm the king of the world!!!

说明客户端已经可

以从服务端获取到值了。

三、动态刷新

无需重新启动客户端,即可更新Spring Cloud Config管理的配置

1、更新gitlab仓库中configserver-dev.properties配置文件中hello对应的属性值

2、访问http://localhost:8888/configserver/dev/master,发现server端内容已经更新

3、对Conf客户端发一个POST请求http://localhost:8889/refresh,返回200 OK。再次访问http://localhost:8889/hello,可见在并未重启客户端服务的情况下,读到的属性值已经动态更新

PS:要想实现动态刷新,需要在pom文件中添加以下starter

org.springframework.boot

spring-boot-starter-actuator


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:万年历接口测试用例(万年历软件测试)
下一篇:angular1配合gulp和bower的使用教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~