版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

            </div>
<!--一个博主专栏付费入口--> <!--一个博主专栏付费入口结束-->
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
<div id="content_views" class="markdown_views">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<h2 id="一简介"><strong>一、简介</strong></h2>

1、 Consul提供了用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。根据应用程序的名称和模拟Spring Cloud Config顺序解析属性的活动配置文件,创建多个PropertySource实例。引用自官网:https://springcloud.cc/spring-cloud-consul.html

2、consul中的k/v操作

添加key/value,下面命令在终端中输入,在consul中存储一个data的key为redis/config/minconns,value为timeout=3000

consul kv put redis/config/minconns timeout=3000

根据key获取value

consul kv get redis/config/minconns

删除key

consul kv delete redis/config/minconns

‘redis/config/‘可以看作文件系统的路径,‘minconns‘相当于文件,‘timeout=3000‘可以看作是文件中的配置项。也可以通过web-ui去操作。

二、创建maven项目consulservice2

注意:不同版本的Spring boot和Spring cloud之间会存在差异,每个项目之间的pom.xml中的依赖也有所不同

1、引入依赖

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--用于监控与管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency> <!--config server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul</artifactId>
</dependency> <!--服务发现依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency> <!--用于consul配置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
</dependencies>

2、创建bootstrap.properties和application.properties两个配置文件

bootstrap.properties:在程序引导期间加载,应用于更加早期配置信息读取,可以配置application.properties相关属性,相当于系统级别的配置,优先加载。

#bootstrap.properties
spring.application.name=consul-service2
server.port=8080

application.properties:应用程序的配置,可以配置程序中各个模块需要的变量。

#application.properties
jdbc.username=root
jdbc.password=123456

3、创建应用程序启动类

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ConsulService2App implements CommandLineRunner {
@Value("${jdbc.username}")
private String username; @Value("${jdbc.password}")
private String password; public static void main(String[] args){
SpringApplication.run(ConsulService2App.class, args);
} @Override
public void run(String... args) throws Exception {
System.out.println("username:" + username);
System.out.println("password:" + password);
}
}

4、运行程序



可以看到正确的读取了我们本地的配置,但是在一般情况下,Spring cloud都会远程加载配置文件,默认情况下,Spring Cloud都会自动使用远程配置覆盖本地配置。配置加载策略是,首先从远程加载,远程存在则覆盖本地,远程不存在,在从本地配置查找,如果本地也不存在,则抛出异常。

5、在bootstrap.properties中添加consul作为配置中心的的配置

5.1 、添加配置

spring.application.name=consul-service2
server.port=8080 # 指定consul配置的文件夹前缀为config
spring.cloud.consul.config.prefix=config
# 指定consul配置的配置文件为configuration
spring.cloud.consul.config.data-key=configuration
# 指定consul配置的配置文件格式properties(maven),gradle为(YAML)
spring.cloud.consul.config.format=properties
#指定consul配置的配置文件父路径
spring.cloud.consul.config.defaultContext=${spring.application.name}

5.2 、在consul server中存储我们的配置项

通过命令行添加配置: jdbc.username=yyh



通过consul的web-ui查看我们的配置,也可以通过consul的web-ui添加配置:

5.3 、再次此运行程序

我们会发现,username已经被远程配置替换



5.4 、使用本地配置覆盖远程配置

下面一段引用官网原文,地址是:https://springcloud.cc/spring-cloud-dalston.html#overriding-bootstrap-properties

通过引导上下文添加到应用程序的属性源通常是“远程”(例如从配置服务器),并且默认情况下,不能在本地覆盖,除了在命令行上。如果要允许您的应用程序使用自己的系统属性或配置文件覆盖远程属性,则远程属性源必须通过设置spring.cloud.config.allowOverride=true(在本地设置本身不起作用)授予权限。一旦设置了该标志,就会有一些更精细的设置来控制远程属性与系统属性和应用程序本地配置的位置:spring.cloud.config.overrideNone=true覆盖任何本地属性源.

注意:一般情况下在较新的版本中spring.cloud.config.allowOverride默认是true,spring.cloud.config.overrideNone为false

接下来添加远程配置:spring.cloud.config.overrideNone=true,在运行程序,会发现,本地属性覆盖了远程属性。此时,假如本地没有jdbc.username=root,Spring cloud就会使用远程的配置jdbc.username=yyh

**6、后续

关于Spring cloud config和Spring cloud consul的配置还有很多,中文官网:https://springcloud.cc/spring-cloud-dalston.html#overriding-bootstrap-properties

源码:https://github.com/NapWells/spring_cloud_learn/tree/master/discover_server_with_consul/springcloudlearn/consulservice2

原文地址:https://blog.csdn.net/qq_36027670/article/details/79701775

SpringCloud使用Consul作为分布式配置中心的更多相关文章

  1. 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新

    前言 上一章节,简单介绍了分布式配置中心Spring Cloud Config的使用.同时,我们也遗漏了一些问题,比如如何配置实时生效,当服务端地址变更或者集群部署时,如何指定服务端地址?回想,在服务 ...

  2. SpringCloud(6)分布式配置中心Spring Cloud Config

    1.Spring Cloud Config 简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组 ...

  3. Springcloud 2.x 版本 分布式配置中心

    一.什么是分布式配置中心? 就是为微服务架构中的微服务提供集中化的外部配置支持,配置中心为各个微服务应用的所有环境提供了中心化的外部配置(可能比较难理解,想知道是什么意思就要知道为什么这么配置:这么配 ...

  4. SpringCloud学习之Config分布式配置中心(八)

    统一配置中心概述 如果微服务架构中没有使用统一配置中心时,所存在的问题: 配置文件分散在各个项目里,不方便维护 配置内容安全与权限,实际开发中,开发人员是不知道线上环境的配置的 更新配置后,项目需要重 ...

  5. SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  6. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件. 在Spring Cloud中,有分布式配置中心组件spring cloud confi ...

  7. java框架之SpringCloud(7)-Config分布式配置中心

    前言 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中标会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...

  8. SpringCloud 进阶之分布式配置中心(SpringCloud Config)

    1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...

  9. SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)

    在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管 ...

随机推荐

  1. JVM 接口初始化规则

    1.创建两个接口,MyParent5接口,MyChild5 接口继承自MyParent5接口 public class MyTest5 { public static void main(String ...

  2. php foreach 无法改变数组的值的问题

    转:http://www.cnblogs.com/yangwenxin/p/5845212.html 翻到PHP文档的foreach那页这样写道: “foreach 语法结构提供了遍历数组的简单方式. ...

  3. mkimage工具的用法

    1. mkimage都支持哪些压缩格式 none, gzip, bzip2等 2. 参考资料 这里

  4. 小D课堂 - 零基础入门SpringBoot2.X到实战_第7节 SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf_28..SpringBoot Starter讲解

    笔记 1.SpringBoot Starter讲解     简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-b ...

  5. linux命令实现音频格式转换和拼接

    安装FFmpeg flaceric@ray:~$ sudo apt install FFmpeg flac 安装lame faaceric@ray:~$ sudo apt install lame f ...

  6. java 数据相除

    编程的人都知道,java中的“/”.“%”运算,其中前者为取整,后者取余数.那么有没有快捷的运算方法取正常的运算结果呢? /** * TODO 除法运算,保留小数 * @author 袁忠明 * @d ...

  7. 宣化上人:大佛顶首楞严经四种清净明诲浅释(1)(转自学佛网:http://www.xuefo.net/nr/article23/230609.html)

    唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 四种清净明诲,真实不虚 楞严经里的四种清净明诲:断淫.断杀.断偷.断妄,是息息相关的.若犯淫戒,就容易犯杀戒,也容易犯盗戒.妄 ...

  8. window下安装docker

    下载docker toolbox https://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 1,.双击安装DockerTool ...

  9. 使用wkhtmltopdf将多个html批量转成pdf

    相关工具:wkhtmltopdf 场景:比如笔者有 ognl中文文档,全部是html,现在想把它转成pdf,放到ipad阅读,文件如下: 下载好wkhtmltox(本地安装目录 D:\develop\ ...

  10. Go语言学习笔记——Go语言数据类型

    布尔型 布尔型的值只可以是常量 true 或者 false.一个简单的例子:var b bool = true. 数字类型 整型 int 和浮点型 float32.float64,Go 语言支持整型和 ...