一 Nacos 配置中心

1 引入依赖 – services.pom

  每个微服务都需要

        <!--配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

2 配置文件 – service-order

  指定Nacos地址,并指定想导入Nacos中的那些配置信息(数据集)

spring.application.name=service-order
server.port=8000
spring.cloud.nacos.server-addr=127.0.0.1:8848# nacos前缀自动引用地址 项目启动后将配置中心的 service-order.properties 文件导入
spring.config.import=nacos:service-order.properties

3 创建数据集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 订单支付超时时间,用户下单后需在 30分钟 内完成支付,否则订单自动取消。
order.timeout=30min
# 订单发货后 3天 自动确认收货(无需用户手动点击确认)。
order.auto-confirm=3d

4 获取配置文件内容 – OrderController

@RestController
public class OrderController {@AutowiredOrderService orderService;// 获取配置文件中的配置值@Value("${order.timeout}")String orderTimeOut;@Value("${order.autoconfirm}")String orderAutoConfirm;// 测试@GetMapping("/config")public String config(){return "order.timeout:"+orderTimeOut+";order.autoconfirm:"+orderAutoConfirm;}@GetMapping("/create")public Order createOrder(@RequestParam("productId") Long productId,@RequestParam("userId") Long userId) {Order order = orderService.createOrder(productId, userId);return order;}
}

5 启动测试

在这里插入图片描述
在这里插入图片描述
自配置中心获取数据,但此刻还不能够跟随配置中心同步变化
在这里插入图片描述

二 动态刷新

1 自动刷新属性 – OrderController

  想要属性能够跟随配置中心变化,还需要注解@RefreshScope,激活配置属性的刷新功能

@RefreshScope
@RestController
public class OrderController {@AutowiredOrderService orderService;// 获取配置文件中的配置值@Value("${order.timeout}")String orderTimeOut;@Value("${order.autoconfirm}")String orderAutoConfirm;@GetMapping("/config")public String config(){return "order.timeout:"+orderTimeOut+";order.autoconfirm:"+orderAutoConfirm;}@GetMapping("/create")public Order createOrder(@RequestParam("productId") Long productId,@RequestParam("userId") Long userId) {Order order = orderService.createOrder(productId, userId);return order;}
}

2 自动刷新测试

在这里插入图片描述
在这里插入图片描述
跟随配置中心变化
在这里插入图片描述

3 配置文件禁用导入检查 – service-product

  当导入配置中心依赖后,但微服务还不需要使用配置中心,启动服务会导致报错,因此需要将配置设置为可选(引入的配置文件可以没有)或禁用Nacos的导入检查
在这里插入图片描述

spring.application.name=service-product
server.port=9000
spring.cloud.nacos.server-addr=127.0.0.1:8848# 不启动导入检查
spring.cloud.nacos.config.import-check.enabled=false

4 优化动态刷新

  ① 将配置常用数据抽取到Bean中 – OrderProperties
在这里插入图片描述

// 该 Bean 需为容器中的组件才能够成功绑定
@Component
// 指定属性前缀 order. 属性名可省略 order
@ConfigurationProperties(prefix = "order")
@Data
public class OrderProperties {// 可以对配置文件中的属性进行批量绑定 无需 @RefreshScopeString timeOut;// orderAutoConfirmString autoConfirm;
}

  ② 修改方法 – OrderController

// @RefreshScope 不再需要
@RestController
public class OrderController {@AutowiredOrderService orderService;// 所需属性@AutowiredOrderProperties orderProperties;@GetMapping("/config")public String config(){return "order.timeout:"+orderProperties.getTimeOut()+";order.autoconfirm:"+orderProperties.getAutoConfirm();}@GetMapping("/create")public Order createOrder(@RequestParam("productId") Long productId,@RequestParam("userId") Long userId) {Order order = orderService.createOrder(productId, userId);return order;}
}

5 测试动态刷新

在这里插入图片描述

6 注意

  配置中心内容为高优先级配置,项目内部的 application.properties 是低优先级配置,当二者对同一属性都有编写时,高优先级会生效,也就是先导入优先和外部优先
具体流程为:项目启动时,将所有配置合并,产生冲突低优先级的配置被丢弃,然后生成一张生效的配置列表,存入项目的环境变量中,等待取用。
若存在多个导入的配置文件都属于高优先级配置(外部优先),则按照先后顺序排列等级,以第一次声明的配置为准(先导入优先)

// service-order.properties 优先级更高
spring.config.import=nacos:service-order.properties,nacos:common.properties

三 监听配置 – NacosConfigManager

1 作用

  当配置中心的配置文件发生变化,我们需要获取是哪一项发生了变化,可通过邮件通知。
因此需要在项目启动时监听配置文件变化,发生变化后拿到变化的值,然后发送邮件

2 监听方法 – OrderMainApplication

// 开启服务发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class OrderMainApplication {public static void main(String[] args) {SpringApplication.run(OrderMainApplication.class, args);}// 参数上的所有组件会自动从容器中拿 -- Spring Boot 机制// 一次性任务 项目启动的同时触发@BeanApplicationRunner applicationRunner(NacosConfigManager  nacosConfigManager) {// 项目启动时运行该任务return new ApplicationRunner() {@Overridepublic void run(ApplicationArguments args) throws Exception {// 查看是否成功触发System.out.println("RUN!!!");// 拿到配置服务ConfigService configService = nacosConfigManager.getConfigService();// 给配置服务添加一个监听器 参数为:数据集ID 组 监听器configService.addListener("service-order.properties", "DEFAULT_GROUP", new Listener() {// 监听器的监听任务是在线程池中运行的@Overridepublic Executor getExecutor() {// 给一个固定大小的线程池return Executors.newFixedThreadPool(4);}// 接收配置信息@Overridepublic void receiveConfigInfo(String configInfo) {System.out.println("变化为:"+configInfo);System.out.println("可发邮件通知");}});}};}
}

3 测试

在这里插入图片描述
在这里插入图片描述

四 数据隔离

1 作用

  研发项目会存在多种环境如,开发,测试,生产,根据不同环境,每个微服务的同一套配置的值就会有所变动如,订单服务的数据库配置文件在不同环境需要链接不同的数据库,因此需要实现数据隔离。

2 实现原理

  根据定义,Nacos 采用Namespace命名空间 → Group组 → Data-id数据集的三层隔离结构,通过命名空间区分环境,组区分每个微服务,数据集区分配置,一套命名空间含有多个组,每个组下面有对应的多个数据集。
在SpringBoot项目中,可定义多个环境与各命名空间绑定,在项目启动时激活想要的环境,其绑定的命名空间下的所有配置就会对应生效。

3 新建命名空间

  若不创建命名空间,则配置都存在于默认的public(保留空间)
在这里插入图片描述

4 新建组与数据集

  订单组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
商品组
在这里插入图片描述

5 克隆配置

  复制配置文件到不同环境,便于更改配置文件内容
在这里插入图片描述

6 更新配置文件 – service-order

  注释掉原配置文件application.properties,使用新文件 –application.yml,原配置文件import对应的是public(保留空间),此时应更换其他环境

server:port: 8000spring:application:name: service-ordercloud:nacos:server-addr: 127.0.0.1:8848# 表示接下来要读取的 dev 命名空间下的配置config:namespace: devconfig:# - 此处短横线表示导入一个文件 order 组的 common.properties 文件import:- optional:nacos:common.properties?group=order- optional:nacos:database.properties?group=order

7 更新配置属性Bean – OrderProperties

// 该 Bean 需为容器中的组件才能够成功绑定
@Component
// 指定属性前缀 order. 属性名可省略 order
@ConfigurationProperties(prefix = "order")
@Data
public class OrderProperties {// 可以对配置文件中的属性进行批量绑定 无需 @RefreshScopeString timeOut;// orderAutoConfirmString autoConfirm;// 新属性String dbUrl;
}

8 更新方法 – OrderController

@RestController
public class OrderController {@AutowiredOrderService orderService;// 所需属性@AutowiredOrderProperties orderProperties;@GetMapping("/config")public String config(){return "order.timeout:"+orderProperties.getTimeOut()+ ";order.autoconfirm:"+orderProperties.getAutoConfirm()+ ";order.dbUrl:"+orderProperties.getDbUrl();}@GetMapping("/create")public Order createOrder(@RequestParam("productId") Long productId,@RequestParam("userId") Long userId) {Order order = orderService.createOrder(productId, userId);return order;}
}

9 启动测试

在这里插入图片描述
在这里插入图片描述

10 切换环境测试 – service-order

  ① 修改为测试环境 – application.yml

server:port: 8000spring:application:name: service-ordercloud:nacos:server-addr: 127.0.0.1:8848# 表示接下来要读取的 dev 命名空间下的配置config:namespace: testconfig:# - 此处短横线表示导入一个文件 order 组的 common.properties 文件import:- optional:nacos:common.properties?group=order- optional:nacos:database.properties?group=order

  ② 测试
在这里插入图片描述

11 多配置文件场景配置文件 – service-order

  ① 修改配置文件,不同环境所需配置文件数量可能不统一,yaml可支持多文档模式,- - -表示多文档模式,根据spring:profiles:active选择对应环境所需的配置文件

server:port: 8000spring:profiles:active: devapplication:name: service-ordercloud:nacos:server-addr: 127.0.0.1:8848# 表示接下来要读取的 dev 命名空间下的配置config:# 关闭检查import-check:enabled: false# 动态根据 active 变化 若不配置 默认为 publicnamespace: ${spring.profiles.active:public}---
spring:config:# - 此处短横线表示导入一个文件 order 组的 common.properties 文件import:- optional:nacos:common.properties?group=order- optional:nacos:database.properties?group=order# 表示在开发环境下生效 这两个文件生效 搭配 profiles active 激活使用activate:on-profile: dev---
spring:config:import:- optional:nacos:common.properties?group=order- optional:nacos:database.properties?group=order- optional:nacos:dahuang.properties?group=order# 表示在测试环境下生效 这两个文件生效activate:on-profile: test---
spring:config:import:- optional:nacos:common.properties?group=order- optional:nacos:database.properties?group=order- optional:nacos:xiaohuang.properties?group=order# 表示在生产环境下生效 这两个文件生效activate:on-profile: prod

  ② 测试,首先根据active: dev标识dev被激活,连接namespace,其中 ${spring.profiles.active:public}的值为dev,然后判断on-profile:devdev时,所需要导入的配置文件。
在这里插入图片描述
在这里插入图片描述
③ 测试 test
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

.NET 中的延迟初始化:Lazy<T> 与LazyInitializer

标签&#xff1a;线程安全、延迟初始化、按需初始化、提升启动性能 项目地址&#xff1a;NitasDemo/12Lazy/LazyDemo at main Nita121388/NitasDemo 目录Lazy<T>1. 概念2. 基本用法 3. 异常处理 4. 线程安全模式 5. 示例1. 线程安全模式 (ExecutionAndPublication)2. 发…

【LLIE专题】LLIE低照度图像结构先验提取方法

Zero-Shot Day-Night Domain Adaptation with a Physics Prior&#xff08;ICCV,2021&#xff09;专题介绍一、研究背景二、方法1. 物理反射模型与颜色不变特征的推导&#xff08;原理推导、物理依据&#xff09;2. 颜色不变特征的计算&#xff08;特征计算公式整个过程&#x…

Font Awesome Kit 使用详解

在现代网页设计中&#xff0c;图标是提升用户体验的关键元素。而 Font Awesome 作为最受欢迎的图标库&#xff0c;其最新版本 Font Awesome 7 通过 Kit 功能提供了更便捷高效的集成方式。本文将带你全面了解如何使用 Font Awesome Kit&#xff0c;让你的网站图标管理变得轻松高…

第七十八章:AI的“智能美食家”:输出图像风格偏移的定位方法——从“滤镜病”到“大师风范”!

AI图像风格偏移前言&#xff1a;AI的“火眼金睛”——输出图像风格偏移的定位方法&#xff01;第一章&#xff1a;痛点直击——“画风跑偏”&#xff1f;AI生成艺术的“审美危机”&#xff01;第二章&#xff1a;探秘“画风密码”&#xff1a;什么是风格偏移&#xff1f;它藏在…

Android原生(Kotlin)与Flutter混合开发 - 设备控制与状态同步解决方案

Kotlin 原生实现 (Android) 1.1 AndroidManifest.xml <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.afloia.smartconnect"><applicationandroid:name".MainApplication"android:label"Smart …

已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成

近期了解到&#xff0c;Highcharts官方宣布将Highcharts.NET&#xff0c;Highcharts Android&#xff0c;与Highcharts iOS集成转换为开源。对于Highcharts提供世界一流的数据可视化工具&#xff0c;一直致力于将资源集中在可以为您提供最大价值的地方。官方提到&#xff1a;这…

KingbaseES:一体化架构与多层防护,支撑业务的持续稳定运行与扩展

声明&#xff1a;文章为本人真实测评博客&#xff0c;非广告 目录 引言 一、什么是KingbaseES&#xff1f; 二、KingbaseES核心特性 1. 一键迁移&#xff0c;极速性能&#xff0c;安全无忧​ 2. 性能强劲&#xff0c;扩展性强&#xff0c;助力企业应对大规模并发挑战​ …

scikit-learn/sklearn学习|广义线性回归 Logistic regression的三种成本函数

【1】引言 前序学习进程中&#xff0c;已经对线性回归和岭回归做了初步解读。 实际上&#xff0c; Logistic regression是一种广义的线性模型&#xff0c;在对线性分类的进一步学习前&#xff0c;有必要了解 Logistic regression。 【2】Logistic regression的3种成本函数 …

Tiptap(基于 Prosemirror)vs TinyMCE:哪个更适合你的技术栈?

在这之前&#xff0c;先来介绍一下 ProseMirror&#xff1a; 1. ProseMirror 是底层内核 定位&#xff1a;一个强大的 富文本编辑框架/引擎&#xff0c;不是一个成品编辑器。 作者&#xff1a;Marijn Haverbeke&#xff08;CodeMirror 作者&#xff09;。 核心思想&#xff1…

多墨智能-AI一键生成工作文档/流程图/思维导图

本文转载自&#xff1a;多墨智能-AI一键生成工作文档/流程图/思维导图 - Hello123工具导航 ** 一、AI 文档与视觉化创作助手 多墨智能是一款基于人工智能的在线工具&#xff0c;支持一键生成专业文档、流程图与思维导图&#xff0c;通过关键词输入快速完成内容创作&#xff0…

Kafka_Broker_副本基本信息

Kafka副本作用&#xff1a;提高数据可靠性 Kafka默认副本1个&#xff0c;生产环境一般配置为2个&#xff0c;保证数据可靠性&#xff0c;太多副本会增加磁盘存储空间&#xff0c;增加网络上数据传输&#xff0c;降低效率 Kafka中副本分为&#xff1a;Leader和Follower&#xff…

FreeRTOS 中的守护任务(Daemon Task)

在 FreeRTOS 中&#xff0c;守护任务&#xff08;Daemon Task&#xff09;是一个特殊的系统任务&#xff0c;主要用于管理软件定时器和其他后台操作。以下是关于 FreeRTOS 守护任务的详细信息&#xff1a; 守护任务的作用软件定时器管理&#xff1a; 当启用 configUSE_TIMERS 时…

博士招生 | 麻省理工学院 招收化学+人工智能方向 博士/博士后

内容源自“图灵学术博研社”gongzhonghao学校简介麻省理工学院&#xff08;MIT&#xff09;QS世界排名第1&#xff0c;是全球科技研究领域的顶尖学府。自成立以来&#xff0c;MIT以其卓越的科研和教育质量赢得了世界的尊敬。学校在科学、工程、经济和管理等多个领域具有深远的影…

云计算-OpenStack 实战运维:从组件配置到故障排查(含 RAID、模板、存储管理,网络、存储、镜像、容器等)

介绍 在云计算技术快速发展的背景下,OpenStack 作为开源的云计算管理平台,凭借其灵活性、可扩展性和强大的组件生态,成为构建私有云、公有云和混合云的重要选择。无论是云主机的创建与管理、存储方案的配置(如 RAID 阵列、Swift 对象存储、Cinder 块存储),还是网络编排、…

idea代码bug检测插件

代码检测工具&#xff08;插件&#xff09;推荐&#xff1a;Alibaba Java Coding Guidelines、CheckStyle、PMD、FindBugs、SonarLint。可以在idea中安装插件 让你在关注代码质量的同时&#xff0c;减少 code review 的工作量&#xff0c;提高 code review 的效率&#xff0c;…

Java String为什么要设计成不可变的?

大家好&#xff0c;我是锋哥。今天分享关于【Java String为什么要设计成不可变的?】面试题。希望对大家有帮助&#xff1b; Java String为什么要设计成不可变的? 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; Java中的String类被设计为不可变&#xff08;immut…

集成电路学习:什么是ORB方向性FAST和旋转BRIEF

ORB:方向性FAST和旋转BRIEF ORB(Oriented FAST and Rotated BRIEF)是一种在计算机视觉领域广泛应用的特征描述算法,它结合了FAST角点检测算法和BRIEF描述子算法的优点,以实现高效且具有旋转不变性的特征提取和匹配。以下是关于ORB算法的详细解析: 一、ORB算法概述 …

【langgraph基础入门】

1. LangGraph图结构概念说明在以图构建的框架中&#xff0c;任何可执行的功能都可以作为对话、代理或程序的启动点。这个启动点可以是大模型的 API 接口、基于大模型构建的 AI Agent&#xff0c;通过 LangChain 或其他技术建立的线性序列等等&#xff0c;即下图中的 “Start” …

[逆向知识] AST抽象语法树:混淆与反混淆的逻辑互换(一)

博客配套代码发布于github&#xff1a;半自动化cookie更新&#xff08;欢迎顺手Star一下⭐&#xff09; 相关逆向知识&#xff1a; [逆向知识] AST抽象语法树&#xff1a;混淆与反混淆的逻辑互换&#xff08;二&#xff09;-CSDN博客 相关爬虫专栏&#xff1a;JS逆向爬虫实战…

网络安全合规6--服务器安全检测和防御技术

一、服务器安全风险主要威胁&#xff1a;不必要的服务暴露&#xff08;如仅需HTTP却开放多余端口&#xff09;。外网扫描&#xff08;IP/端口扫描&#xff09;、DDoS攻击。系统漏洞攻击&#xff08;操作系统、软件版本已知漏洞&#xff09;。Web攻击&#xff08;SQL注入、XSS、…