Java研學-SpringCloud(五)

一 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、…