版权声明:本文为博主原创文章,遵循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. 码云 Gitee 云端软件平台学习--GitHub

    码云 Gitee http://git.oschina.net/jackjiang/MobileIMSDK http://www.blogjava.net/jb2011/archive/2018/11 ...

  2. 011 client系列案例

    一:Client系列 1.说明 clientWidth:不包括边框的可视区的宽 clientHeight:可视区的高,不包括边框 clientLeft:左边框的宽度 clientTop:上面框的宽度 ...

  3. Kali Linux又增加一个顶级域名kali.download

    Kali Linux又增加一个顶级域名kali.download 现阶段,kali.download只提供软件包和镜像下载.大家可以把该域名作为备选软件源来使用.形式如下: deb  http://k ...

  4. Windows下通过命令行 获取文件详细信息

    @echo off echo version: wmic datafile where Name="C:\\Product\\File\\Release\\1.1.1\\File.exe&q ...

  5. 【转】把sqlite3数据导入到MySQL中

    之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据.如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去. 1.SQLit ...

  6. python解决排列组合

    笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...

  7. yarn那些事儿

    本篇文章立足于mac. 一.安装yarn 1.通过homebrew brew update brew install yarn 2.通过脚本 curl -o- -L https://yarnpkg.c ...

  8. 前端研究CSS之内联元素块级化/区域大小/文字和图标的位置

    做了一天的小按钮基本都是文字+小图标的组合,问题挺多处理的不好,现在总结一下做个了断. //页面结构 <span class="b"> <a href=" ...

  9. Charles 手机抓包HTTPS设置以及证书安装

    本文参考:charles 抓包手机 charles经常会进行手机上的网页抓包,比如去copy别人网站图片或脚本的时候o(∩_∩)o : 手机抓包的原理,和PC类似,手机依靠charles与服务端进行对 ...

  10. golang 学习 (八)协程

    一: 进程.线程 和 协程 之间概念的区别:        对于 进程.线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度(有多种调度算法)    (补充: 抢占式调度与非抢占(轮询 ...