Spring Cloud Config 配置中心

news2024/12/24 8:59:37

    最简单的配置中心,就是启动一个服务作为服务方,之后各个需要获取配置的服务作为客户端来这个服务方获取配置。

Spring Cloud Config,可以用 git ,还可以用数据库、svn、本地文件等作为存储。

1. Config Server

引入 config-server 和 starter-web

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- spring cloud config 服务端包 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

1.1 Git方式存储

spring:
  application:
    name: config-single-server  # 应用名称
  cloud:
     config:
        server:
          git:
            uri: https://github.com/huzhicheng/config-only-a-demo #配置文件所在仓库
            username: github 登录账号
            password: github 登录密码
            default-label: master #配置文件分支
            search-paths: config  #配置文件所在根目录

1.2 本地类路径方式

通过在search-locations中指定classpath下的路径。需要设置spring.profiles.active=native

spring:
  application:
    name: config-server
  profiles:
    #native表示本地方式
    active: native
  cloud:
    config:
      server:
        native:
          # 配置文件存放路径
          search-locations: file:/MyTemp/configserver,classpath:/config-server

1.3本地文件系统方式

通过在search-locations中指定file协议的本地路径.。需要设置spring.profiles.active=native

spring:
  application:
    name: config-server
  profiles:
    #native表示本地方式
    active: native
  cloud:
    config:
      server:
        native:
          # 配置文件存放路径
          search-locations: file:/MyTemp/configserver,classpath:/config-server

1.4 在 Application 启动类上增加相关注解 @EnableConfigServer 

@SpringBootApplication
@EnableConfigServer
public class ConfigServerProgram {

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

1.5  启动Config Server服务 

配置完成之后启动服务,我们可以通过这几种规则在浏览器访问config servver获取配置。

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

http://localhost:9090/producer-one.yml

7866b926361647c48082d80e8eac9651.png

http://localhost:9090/producer/one9cac14331b9842939c0a4bac7ef1ad9e.png

 2. Config Client

        引用相关的 maven 包

<dependencies> 
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.3</version>
        </dependency>
<!-- spring cloud config 客户端包 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
<!-- spring cloud 3.1版本需要手动引入bootstrap,不然加载不到bootstrap.yml文件 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.1 配置文件

bootstrap.yml

 spring:
  profiles:
    active: dev

---
spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:9090
      name: producer
      profile: one

2.2 失败快速响应

不作任何额外配置的情况下,失败响应有点迟钝,举个简单的例子,关掉config-server,我们直接启动config-client,此时启动会报错,但是报错时间较晚,报错的时候系统已经打印了许多启动日志了,如果我们希望在启动失败时能够快速响应,方式很简单,config-client中添加如下配置即可:

spring.cloud.config.fail-fast=true

2.3 本地配置优先Config Server配置

如果要优先使用本地配置,需要在远程配置(Config Server)中加入一些参数。

spring.cloud.config.allow-override=true(允许被覆盖)
spring.cloud.config.override-none=true (远程配置不覆盖任何本地配置)
spring.cloud.config.override-system-properties=false (远程配置不覆盖系统属性与环境变量,但是会覆盖本地配置文件)

2.4 重试机制

如果由于网络抖动等原因导致config-client在启动时候访问config-server没有访问成功从而报错,这显然是不划算的,遇到这种情况我们希望config-client最好能重试几次,重试机制在这里也是受支持的,添加重试机制的方式很简单,引入如下两个依赖,不用做任何额外配置(当然要确保失败快速响应已开启):

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

 重试机制也可以配置:

# 配置重试次数,默认为6
spring.cloud.config.retry.max-attempts=6
# 间隔乘数,默认1.1
spring.cloud.config.retry.multiplier=1.1
# 初始重试间隔时间,默认1000ms
spring.cloud.config.retry.initial-interval=1000
# 最大间隔时间,默认2000ms
spring.cloud.config.retry.max-interval=2000

2.5 动态刷新配置

有的时候,我动态的更新了Config Server的配置文件,那么我如何让我的config-client能够及时感知到呢?方式很简单,首先在config-client中添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

1.对actuator进行配置

management:
  endpoint:
    shutdown:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"

2. 在需要读取配置的类上增加 @RefreshScope 注解

@SpringBootApplication
@Slf4j
@RefreshScope
public class ConfgClientProgram {

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

    @Value("${mykey.myvalue}")
    String mykey_myvalue;

    @PostConstruct
    public void init() {
        log.info(mykey_myvalue);
    }
}

3. 调用Config Client,/actuator/refresh使用接口刷新

/actuator/refresh 接口就是用来触发加载新配置,接口会返回如下配置。

[
    "config.client.version",
    "data.env"
]

 

 

参考:

Spring Cloud Config 实现配置中心,看这一篇就够了 - 风的姿态 - 博客园

Spring Cloud Config客户端配置细节__江南一点雨的博客-CSDN博客

 

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

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

相关文章

Day08--自定义组件的properties属性

提纲挈领&#xff1a; 1.properties属性 我的操作&#xff1a; 1》 2》 3》输出看看效果是不是真的有接收到。 ********************************* ********************************* ********************************* ********************************* **************…

Spring 源码阅读

1. beanFactory The root interface for accessing a Spring bean container. 2. BeanFactoryPostProcessor 对bean定义进行后置处理&#xff0c;比如jdbc类读取配置的密码&#xff0c;用户名等。 3.BeanPostProcessor public interface BeanPostProcessor {Object postProce…

ctfshow--RCE极限挑战

本周ctfshow的挑战注重点为RCE&#xff0c;主要利用是&#xff1a;自增绕过RCE RCE挑战1 属于简单类型 源码 error_reporting(0); highlight_file(__FILE__); $code $_POST[code]; $code str_replace("(","括号",$code); $code str_replace(".&q…

Arcgis使用教程(十一)ARCGIS地图制图之经纬网格设置参数详解

Arcgis地图制图中&#xff0c;经纬网格的添加详细参见&#xff1a; Arcgis使用教程&#xff08;十&#xff09;ARCGIS地图制图之经纬网格添加_空中旋转篮球的博客-CSDN博客 1.加载数据 在Arcmap中加载中国矢量图层数据&#xff08;中国省级行政区图&#xff0c;国界线两个图层…

善于使用二阶思维

事情往往不是你想象的那样&#xff0c;有时候&#xff0c;看似解决了问题&#xff0c;却在不经意间&#xff0c;引发了更严重的后果。帮助我们思考、决策、解决问题的最有效方法是&#xff0c;运用二阶思维。 什么是二阶思维&#xff1f; 一阶思维是单纯而肤浅的&#xff0c;几…

34.nacos客户端读取共享配置文件实例(springcloud)

其他配置环境和上文相同&#xff0c;本实例不再演示 https://blog.csdn.net/weixin_59334478/article/details/127953755?spm1001.2014.3001.5501https://blog.csdn.net/weixin_59334478/article/details/127953755?spm1001.2014.3001.55011.新建共享配置文件&#xff0c;使…

高NA (数值孔径)物镜的分析

高NA(数值孔径)物镜常用于光学显微及光刻&#xff0c;并已广泛在其他应用中得以使用。众所周知&#xff0c;在高数值孔径物镜的使用中&#xff0c;电磁场矢量特性的影响是不可忽略的。一个众所周知的例子就是由高NA(数值孔径)物镜聚焦线性偏振圆光束时&#xff0c;焦斑的不对称…

过控Matlab-实验法建立被控过程的数学模型(一)

太原理工大学过程控制实验之实验法建立被控过程的数学模型 过控Matlab实验法建立被控过程的数学模型实验内容1.利用MATLAB根据作图法建立系统的一阶惯性环节加纯迟延的近似数学模型。2.利用MATLAB根据计算法建立系统的一阶惯性环节加纯迟延的近似数学模型。3.利用MATLAB根据计算…

[附源码]计算机毕业设计JAVA基于JSP社区生鲜配送系统

[附源码]计算机毕业设计JAVA基于JSP社区生鲜配送系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

[附源码]java毕业设计网上手机商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

驱动开发基础

1、Hello驱动 我们应用程序使用open函数的时候&#xff0c;会调用内核的sys_open函数&#xff0c;然后接下来 1、然后打开普通文件的话会使用文件系统操作硬件&#xff0c; 2、要是打开驱动文件&#xff0c;会使用驱动程序对应的drv_open函数 怎么写驱动程序 我们驱动对应的d…

了解 Oracle 中的视图

一、概念 视图是基于一个或者多个表上的预定义查询&#xff0c;这些表称为基表&#xff0c;从视图中查询数据的方法与从基表中查询数据的方法相同。视图是一个查看数据的窗口&#xff0c;是查询语句模板&#xff0c;视图本身没有数据&#xff0c;在数据库中只保存了视图的定义…

[附源码]java毕业设计图书管理系统论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Unity界面介绍:场景视图

场景视图是创建游戏的主要场所。用户将使用场景视图来选择和定位环境物体&#xff0c;角色物体&#xff0c;摄像机&#xff0c;敌人角色等其它的游戏物体。熟悉和操作场景视图中的物体是创建游戏中的重要步骤。为此&#xff0c;Unity也提供了一些快捷键来提高操作效率。 场景视…

UVM实战笔记(六)

第六章. UVM中的sequence 6.1 sequence基础 6.1.1 从driver中剥离激励产生功能 sequence机制的作用是为了从driver中剥离出产生激励的功能。在不同的测试用例中&#xff0c;将不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时&…

用cocos实现的立方体宣传查看页面

cocos进入3.x时代&#xff0c;我也努力跟进&#xff0c;实现了一个将页面映射到立方体上进行旋转查看的效果。 效果如下&#xff1a; 要点 为了这个效果&#xff0c;我主要实现了3个要点&#xff1a; 将页面准确映射到立方体上面&#xff0c;适配不同尺寸的手机屏幕。对页面…

C++初阶作业 Vector作业详解

作者&#xff1a;小萌新 专栏&#xff1a;C初阶作业 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;讲解vecotr学校布置的作业 弥补自己不足的知识点 Vector作业详解Vector的特性及使用题目一 迭代器失效编程一 只出现一次的数字编程二 杨辉三角…

aws eks 部署jupyterhub执行kubectl

资料 https://aws.amazon.com/cn/blogs/china/teach-you-how-to-handle-kubeflow-on-eks-2/https://hub.docker.com/r/jupyterhub/singleuser 在部署kubeflow的过程中意识到在jupyter中能够运行外部指令&#xff0c;如果在其中集成一个kubectl&#xff0c;就可以实现命令的重…

【PowerQuery】Excel 自动刷新PowerQuery连接

Excel集成的PowerQuery提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接的自动刷新…

封装vue插件并发布到npm详细步骤

前言 平常使用Vue开发时&#xff0c;一个项目中多个地方需要用到的相同组件通常我们会封装为一个公共组件&#xff0c;但是如果项目不同我们也需要这个组件&#xff0c;那就需要复制一份公共组件代码到新项目&#xff0c;一个还好&#xff0c;如果是多个组件&#xff0c;这样就…