? Spring Clould 配置中心 - Nacos

??視頻地址:微服務(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)?

?Nacos配置管理-Nacos實現配置管理(P24、P25)

Nacos除了可以做注冊中心,同樣可以做配置管理來使用。

當微服務部署的實例越來越多,達到數十、數百時,逐個修改微服務配置就會讓人抓狂,而且很容易出錯。我們需要一種統一配置管理方案,可以集中管理所有實例的配置。

Nacos一方面可以將配置集中管理,另一方可以在配置變更時,及時通知微服務,實現配置的熱更新。

如何在nacos中管理配置呢?

然后在彈出的表單中,填寫配置信息:

注意:項目的核心配置,需要熱更新的配置才有放到nacos管理的必要。基本不會變更的一些配置還是保存在微服務本地比較好。

?Nacos配置管理-微服務配置拉取(P26)

獲取配置文件(單yml文件)步驟如下:

微服務要拉取nacos中管理的配置,并且與本地的application.yml配置合并,才能完成項目啟動。

但如果尚未讀取application.yml,又如何得知nacos地址呢?

因此spring引入了一種新的配置文件:bootstrap.yaml文件,會在application.yml之前被讀取,流程如下:

1)引入nacos-config依賴

首先,在user-service服務中,引入nacos-config的客戶端依賴:

<!--nacos配置管理依賴-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)添加bootstrap.yaml

然后,在user-service中添加一個bootstrap.yaml文件,內容如下:

spring:application:name: userservice # 服務名稱profiles:active: dev #開發環境,這里是dev cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后綴名

這里會根據spring.cloud.nacos.server-addr獲取nacos地址,再根據

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作為文件id,來讀取配置。

本例中,就是去讀取userservice-dev.yaml

3)讀取nacos配置

在user-service中的UserController中添加業務邏輯,讀取pattern.dateformat配置:

完整代碼:

package cn.itcast.user.web;
?
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
?
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
?
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
?@Autowiredprivate UserService userService;
?@Value("${pattern.dateformat}")private String dateformat;@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));}// ...略
}

在頁面訪問,可以看到效果:

?總結:

?Nacos配置管理-配置熱更新(P27)

我們最終的目的,是修改nacos中的配置后,微服務中無需重啟即可讓配置生效,也就是配置熱更新

要實現配置熱更新,可以使用兩種方式:

方式一

在@Value注入的變量所在類上添加注解@RefreshScope:

方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服務中,添加一個類,讀取patterrn.dateformat屬性:

package cn.itcast.user.config;
?
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
?
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {private String dateformat;
}

在UserController中使用這個類代替@Value:

完整代碼:

package cn.itcast.user.web;
?
import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
?
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
?
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
?@Autowiredprivate UserService userService;
?@Autowiredprivate PatternProperties patternProperties;
?@GetMapping("now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));}
?// 略
}

總結:?

?Nacos配置管理-多環境配置共享(P28)

其實微服務啟動時,會去nacos讀取多個配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含環境,因此可以被多個環境共享。

下面我們通過案例來測試配置共享

1)添加一個環境共享配置

我們在nacos中添加一個userservice.yaml文件:

2)在user-service中讀取共享配置

在user-service服務中,修改PatternProperties類,讀取新添加的屬性:

在user-service服務中,修改UserController,添加一個方法:

3)運行兩個UserApplication,使用不同的profile

修改UserApplication2這個啟動項,改變其profile值:

?

這樣,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

啟動UserApplication和UserApplication2

訪問http://localhost:8081/user/prop,結果:

訪問http://localhost:8082/user/prop,結果:

可以看出來,不管是dev,還是test環境,都讀取到了envSharedValue這個屬性的值。

4)配置共享的優先級

當nacos、服務本地同時出現相同屬性時,優先級有高低之分:

總結:

?Nacos配置管理-Nacos集群搭建(P29)

?鏈接:nacos集群搭建

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41507.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41507.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41507.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD

導讀&#xff1a;原文《18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD》&#xff08;獲取來源見文尾&#xff09;&#xff0c;本文精選其中精華及架構部分&#xff0c;邏輯清晰、內容完整&#xff0c;為快速形成售前方案提供參考。 目 錄 第一章 項目概述 1.1項目…

《Go 語言第一課》課程學習筆記(七)

代碼塊與作用域&#xff1a;如何保證變量不會被遮蔽&#xff1f; 什么是變量遮蔽呢&#xff1f;package mainimport ("fmt""github.com/google/uuid""github.com/sirupsen/logrus" )func main() {fmt.Println("hello, world")logrus.…

私域新零售商業模式成功的八大要素

從事互聯網行業多年以來&#xff0c;遇到客戶問最多的一個問題&#xff0c;就是什么樣的模式火呀&#xff1f;在設計一個商業模式時&#xff0c;不單單只是考慮資金和人脈等等資源的&#xff0c;其實還是需要遵循這八大原則&#xff0c;它包括&#xff1a;客戶價值最大化原則、…

PyTorch學習筆記(十三)——現有網絡模型的使用及修改

以分類模型的VGG為例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

C#學習,委托,事件,泛型,匿名方法

目錄 委托 聲明委托 實例化委托 委托的多播 委托的用途 事件 通過事件使用委托 聲明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 編寫匿名方法的語法 委托 類似于指針&#xff0c;委托是存有對某個方法的引用的一種引用類型變量&#xff0c;引用可以在運…

vue中使用faker庫生成指定類型的隨機數據

介紹 Faker.js 是十分流行的 Node.js 工具庫&#xff0c;2022年初&#xff0c;Faker.js的作者突然刪庫跑路&#xff0c;導致眾多應用程序崩潰&#xff0c;為了繼續使用Faker的功能&#xff0c;社區的幾位開發者組成團隊決定創建并維護新項目faker-js/faker&#xff0c;現其已成…

Docker+Selenium Grid搭建自動化測試平臺

安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下載鏡像 hu…

laravel-admin之 解決上傳圖片不顯示 $form->image(‘image‘); 及 $grid->column(‘image‘);

參考 https://blog.csdn.net/u013164285/article/details/106017464 $grid->column(‘image’)->image(‘http://wuyan.cn’, 100, 100); // //設置服務器和寬高 圖片上傳的域名 上傳的圖片不顯示 在 這里設置了圖片的上傳路徑 在這里設置 域名 就可以回顯圖片

【計算機視覺|生成對抗】帶條件的對抗網絡進行圖像到圖像的轉換(pix2pix)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks 鏈接&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

如何學習正則表達式

正則是什么&#xff0c;能做什么&#xff1f; 正則&#xff0c;就是正則表達式&#xff0c;英文是 Regular Expression&#xff0c;簡稱 RE。顧名思義&#xff0c;正則其實就是一種描述文本內容組成規律的表示方式。 在編程語言中&#xff0c;正則常常用來簡化文本處理的邏輯…

Android DataStore:安全存儲和輕松管理數據

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、人工智能等&#xff0c;希望大家多多支持。 目錄 一、導讀二、概覽三、使用3.1 Preferences DataStore添加依賴數據讀…

LVS負載均衡集群-NAT模式部署

集群 集群&#xff1a;將多臺主機作為一個整體&#xff0c;然后對外提供相同的服務 集群使用場景&#xff1a;高并發的場景 集群的分類 1.負載均衡器集群 減少響應延遲&#xff0c;提高并發處理的能力 2&#xff0c;高可用集群 增強系統的穩定性可靠性&…

封裝vue2局部組件都要注意什么

一. 關于局部組件組成的三個部分&#xff08;template, script, style&#xff09; template > 組件的模板結構 &#xff08;必選&#xff09; 每個組件對應的模板結構&#xff0c;需要定義到template節點中 <template><!-- 當前組件的dom結構&#xff0c;需…

Java SPI加載機制

SPI加載機制 SPI&#xff08;Service Provider Interface&#xff09;是一種通過外界配置來加載具體代碼內容的技術手段。SPI是JDK內置的一種服務提供發現機制&#xff0c;用于實現框架的擴展和組件替換。 在SPI中&#xff0c;框架提供一整套接口&#xff0c;使用者實現這些接…

React源碼解析18(8)------ 實現單節點的Diff算法

摘要 經過之前的幾篇文章&#xff0c;我們已經實現了一個可以進行更新渲染的假React。但是如果我們把我們的jsx修改成這樣&#xff1a; function App() {const [age, setAge] useState(20)const click function() {setAge(age 1)}return age % 2 0 ? jsx("div"…

學習紅外成像儀開發注意要點

學習紅外成像儀開發注意要點 三河凡科科技飛訊紅外成像儀開發學習注意要點 紅外成像儀是一種高級的光學設備&#xff0c;可用于探測、分析和顯示紅外輻射&#xff0c;它廣泛應用于醫學、軍事、石油、礦產資源勘探等領域。紅外成像儀的開發需要注意以下幾個方面&#xff1a; 1…

(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

?劍指 Offer 12. 矩陣中的路徑 難度&#xff1a;中等 給定一個 m * n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構…

使用Rust編寫的一款使用遺傳算法、神經網絡、WASM技術的模擬生物進化的程序

模擬生物進化程序 Github地址&#xff1a;FishLife 期待各位的star??? 本項目是一個模擬生物進化的程序&#xff0c;利用遺傳算法、神經網絡技術對魚的眼睛和大腦進行模擬。該項目是使用 Rust 語言編寫的&#xff0c;并編譯為 WebAssembly (Wasm) 格式&#xff0c;使其可以…

QT學習方法

1 .類的學習方法 第一步:從UI文件中,找到界面的類—QMainWindow第二步:在Qt Creator工具中,找到“幫助”按鈕,進入到幫助菜單界面,在選擇"索引",在Look for:輸入類名,找到類名,雙擊條目中的類名,在右側會顯示出來類的詳細內容第三步:在右側,可根據內容目錄…

Spring項目使用Redis限制用戶登錄失敗的次數以及暫時鎖定用戶登錄權限

文章目錄 背景環境代碼實現0. 項目結構圖&#xff08;供參考&#xff09;1. 數據庫中的表&#xff08;供參考&#xff09;2. 依賴&#xff08;pom.xml&#xff09;3. 配置文件&#xff08;application.yml&#xff09;4. 配置文件&#xff08;application-dev.yml&#xff09;5…