Spring Cloud Consul作为配置中心实践

官网地址:https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#spring-cloud-consul-config

先说个人总结:作为配置中心对比config、Consul以及Nacos后,建议使用 Nacos。

Consul 提供了一个键/值存储用于保存配置和其他元数据。Spring Cloud Consul Config 是 Spring Cloud Config Server和Client的一个替代方案。配置信息在特殊的“bootstrap”阶段被加载到 Spring Environment 中。配置默认存储在 /config 文件夹下。基于应用程序的名称(application’s name)和激活的配置文件( active profiles),会创建多个 PropertySource 实例,这模仿了 Spring Cloud Config 解析属性的顺序。例如,一个名为 “testApp” 并且使用 “dev” 环境的应用程序,将会有如下属性源被创建:

  • consul:/config/testApp-dev.properties
  • consul:/config/testApp.properties
  • consul:/config/application-dev.properties
  • consul:/config/application.properties
config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

这意味着,对于这个名为 “testApp” 并且处在 “dev” 环境下的应用,Spring Cloud Consul Config 会按照上述顺序查找并加载配置信息,优先级从高到低,即先检查更具体的配置(包含应用名和环境的),再到更通用的配置。这样的设计允许灵活地根据不同环境和应用需求来组织和覆盖配置设置。

① pom引入依赖

<!--SpringCloud consul config-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

② bootstrap.yml配置

需要在application.yml 同级创建bootstrap.yml文件

spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-'format: YAML# config/cloud-payment-service/data#       /cloud-payment-service-dev/data#       /cloud-payment-service-prod/data

③ Consul控制台创建文件

在如下界面点击create,创建config文件夹,以 / 结尾表示是文件夹

其

同理创建cloud-payment-service-dev文件夹

在这里插入图片描述

文件夹创建完毕如下所示:

在这里插入图片描述

cloud-payment-service-dev下我们创建配置信息:这里data没有/哦
在这里插入图片描述

④ 代码测试

主启动类如下:

@SpringBootApplication
@EnableDiscoveryClient
public class Main8001
{public static void main(String[] args){SpringApplication.run(Main8001.class,args);}
}

controller如下:

@Value("${server.port}")
private String port;
@GetMapping(value = "/pay/get/info")
public String getInfoByConsul(@Value("${info}") String atguiguInfo)
{return "Info: "+atguiguInfo+"\t"+"port: "+port;
}

浏览器访问 http://localhost:8001/pay/get/info 就可以看到刚刚配置信息

刚

⑤ 动态刷新

此时我们修改data的配置信息,浏览器再次请求返回的内容是不变的。我们可以通过在主启动类添加注解来实现动态刷新:

@RefreshScope // 动态刷新

此时主启动类如下所示:

@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope // 动态刷新
public class Main8001
{public static void main(String[] args){SpringApplication.run(Main8001.class,args);}
}

默认需要等待55秒,这里我们可以修改其刷新时间:

spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-'format: YAMLwatch:wait-time: 1 # 生产环境不建议修改

此时再次修改配置信息data的内容,那么刷新浏览器再次请求将会得到新的内容。

⑥ 配置持久化

按照上面的配置在Consul重启后,将会丢失,所以需要解决持久化问题。

① 创建数据文件夹 mydata

如下所示,创建mydata用来存储数据
在这里插入图片描述

② 创建启动脚本 consul_start.bat

脚本内容如下:

@echo.服务启动......  
@echo off  
@sc create Consul binpath= "D:\softinstall\consul_1.17.1\consul.exe agent -server -ui -bind=127.0.0.1 -client=0.0.0.0 -bootstrap-expect  1  -data-dir D:\softinstall\consul_1.17.1\mydata   "
@net start Consul
@sc config Consul start= AUTO  
@echo.Consul start is OK......success
@pause

右键以管理员身份运行即可。

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

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

相关文章

Vite: 代码分割与拆包

概述 在生产环境下&#xff0c;为了提高页面加载性能&#xff0c;构建工具一般将项目的代码打包(bundle)到一 起&#xff0c;这样上线之后只需要请求少量的 JS 文件&#xff0c;大大减少 HTTP 请求。当然&#xff0c;Vite 也不例 外&#xff0c;默认情况下 Vite 利用底层打包引…

简单的本地局域网的前后端接口联调

由于项目被赶进度了&#xff0c;急于前后端联调接口&#xff0c;但是我又没钱买服务器&#xff08;主要我也不会部署&#xff09;&#xff0c;所以我这里就紧急找一个后端的大神朋友请教了一下&#xff1a;苏泽SuZe-CSDN博客 提示&#xff1a;这里不讲后端怎么写接口、前端怎么…

Java的异常处理体系

目录 异常处理1、Java的异常类层次结构2、try-catch-finally 使用注意事项3、在Web应用中如何实现全局异常处理机制 异常处理 1、Java的异常类层次结构 其中Error表示程序运行错误 常见的错误类型有&#xff1a; OutOfMemoryError (内存溢出错误) StackOverFlowError (栈内存溢…

【408计算机组成原理】计算机系统层次结构

计算机系统层次结构 计算机系统由硬件和软件两大部分组成&#xff0c;它们相互作用&#xff0c;共同完成信息处理任务。计算机系统可以分为多个层次&#xff0c;每一层次都有其特定的功能和作用。 硬件层次 输入设备&#xff1a;这些设备负责将用户的指令和数据输入到计算机…

论文学习:基于知识图谱的RAG进行客服问答

1.简介 文章名称&#xff1a; Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering&#xff08;基于知识图谱的RAG进行客服问答&#xff09; 2.摘要ABSTRACT 在客户服务技术支持中&#xff0c;迅速准确地检索相关的过往问题对于有…

Qt Creator创建一个用户登录界面

目录 1 界面设计 2 代码 2.1 登录界面 2.2 注册界面 2.3 登陆后的界面 3 完整资源 这里主要记录了如何使用Qt Creator创建一个用户登录界面&#xff0c;能够实现用户的注册和登录功能&#xff0c;注册的用户信息存储在了一个文件之中&#xff0c;在登录时可以比对登录信息…

Go 常用文件操作

查找文件/目录 os.Stat(String)组合路径 dir, _ : homedir.Dir() filename : args[0] path : filepath.Join(dir, filename)homedir.Dir()为home根目录。 filepath.Join 会自动处理分隔符&#xff0c;将目录和文件名组合成文件路径。 检查是否含有后缀.json strings.HasSu…

【深度学习】常用命令行指令汇总

这些指令对于管理深度学习环境、监控资源使用、调试程序等方面 查看显卡使用情况 要实时监控NVIDIA显卡的状态,可以使用命令: nvidia-smi -l 1这条命令会每秒刷新一次显卡的使用情况,包括GPU利用率、显存使用情况等。 查看当前Python环境 查看当前使用的Python环境,可…

堆排序(手写堆)

堆排序 输入一个长度为 n的整数数列&#xff0c;从小到大输出前 m小的数。 输入格式 第一行包含整数 n和 m。 第二行包含 n个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 m个整数&#xff0c;表示整数数列中前 m小的数。 数据范围 1≤m≤n≤105&…

【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出

文章目录 前言增加守护进程1. 编写监控脚本2. 创建 systemd 服务文件3. 启动并启用服务4. 验证服务是否运行注意事项 如何修改守护进程1. 修改监控脚本2. 重新加载并重启服务3. 验证服务是否运行总结 如何设置一个日志文件来查看信息1. 修改监控脚本以记录日志方法一&#xff1…

利用代理IP实现高效大数据抓取的策略与技巧

在当今信息爆炸的时代&#xff0c;数据对于各行各业都至关重要。而数据的获取往往需要通过网络爬取。然而随着网络安全意识的提高和反爬虫机制的加强&#xff0c;传统的数据爬取方式可能会受到限制。在这种情况下&#xff0c;代理IP技术的应用就显得尤为重要。本文将探讨代理IP…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …

C++ | Leetcode C++题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

【TensorFlow深度学习】自我编码器的演变:从基础AE到变分AE模型

自我编码器的演变&#xff1a;从基础AE到变分AE模型 一、基础自我编码器&#xff1a;维度的压缩与重构二、变分自我编码器&#xff1a;从确定性到概率性三、理论与实践的桥梁&#xff1a;变分推理与KL散度四、变分AE的应用拓展五、结论 自我编码器&#xff08;Autoencoder, AE&…

GEO数据挖掘-富集分析、TinyArray简化流程、多组样本分析more

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 富集分析一些理论知识具体代码 富集不到的补救措施更多资料---问题数据和常见错误分析Part4-复杂数据及其分析多分组数据分析流程 tinyarray简化版本分析流程多分组…

如何高效安全的开展HPC数据传输,保护数据安全?

高性能计算&#xff08;HPC&#xff09;在多个行业和领域中都有广泛的应用&#xff0c;像科学研究机构、芯片IC设计企业、金融、生物制药、能源、航天航空等。HPC&#xff08;高性能计算&#xff09;环境中的数据传输是一个关键环节&#xff0c;它涉及到将数据快速、安全地在不…

DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元

在科技高速发展的当今时代&#xff0c;软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现&#xff0c;为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发&#xff0c;具有显著的优…

Java中如何使用正则表达式进行字符串匹配和替换?

在Java中&#xff0c;你可以使用java.util.regex包中的正则表达式功能进行字符串匹配和替换。以下是一些基本的使用方法&#xff1a; ### 字符串匹配 你可以使用Pattern和Matcher类来进行正则表达式匹配。下面是一个简单的例子&#xff1a; java import java.util.regex.Patt…

匈牙利命名法,类变量

类变量指的是生存周期在类里的变量&#xff0c;除了这个类就没人认它。网上有很多说的和匈牙利命名法不一致&#xff0c;说静态变量和类变量就是差不多的&#xff0c;其实不是。【面向对象-05】什么是类变量、实例变量、以及区别_类变量和实例变量区别-CSDN博客