SpringBoot使用Nacos進行application.yml配置管理

Nacos是阿里巴巴開源的一個微服務配置管理和服務發現的解決方案。它提供了動態服務發現、配置管理和 服務管理平臺。Nacos的核心功能包括服務發現、配置管理和動態服務管理,使得微服務架構下的服務治理 變得簡單高效。

Nacos的設計基于服務注冊與發現、配置管理、動態服務管理等核心功能,通過簡單的API和配置,實現了服 務的注冊與發現、配置的集中管理和動態更新。Nacos使用Raft協議保證配置的一致性,同時支持多種配置 格式,如properties、yaml等。

目錄

一、準備

二、nacos管理application.yml配置

1.nacos上新建命令空間和新建配置

2.SpringBoot項目配置改造

pom文件引入依賴

新建bootstrap.yml文件

原yml文件改造

3.啟動類注解

4.使用配置

5.測試


一、準備

首先需要在本地電腦上進行Nacos服務部署,默認端口是8848,部署成功之后,就可以去瀏覽器輸入localhost:8848進入nacos管理平臺。

二、nacos管理application.yml配置

1.nacos上新建命令空間和新建配置

首先,新建命名空間(如已存在則忽略),注意:命名空間ID可不填,不填則自動生成:

然后,進到nacos的管理頁面,在Nacos控制臺的左側導航欄進入配置列表,轉到“配置管理”頁面,點擊“+”來添加一個新的配置。

  • Data ID:統一按照這個格式來: 服務名 - 環境 . 后綴名。主要是因為后面要導入的bootstrap.yaml Spring默認的讀取格式就是這樣的。?
  • Group:分組可以自定義,沒有需求可以選擇默認分組DEFAULT_GROUP。
  • 命名空間:設置的命名空間ID。
  • 配置格式:yaml。

在配置內容區域,輸入你想要暴露給Spring Boot應用的配置信息。可以從SpringBoot獲取yml配置信息,將需要配置到config的信息復制配置到配置內容中。

至此,nacos側配置項已完成,接下來進行SpringBoot項目配置改造。

2.SpringBoot項目配置改造

pom文件引入依賴

首先修改Spring Boot項目的pom.xml文件,在pom.xml文件中添加Nacos Config和Nacos Discovery的依賴。

<!--nacos配置管理依賴-->
<dependencies>  <!-- Nacos Config -->  <dependency>  <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>  <version>2021.1</version>  </dependency>  <!-- Nacos Discovery -->  <dependency>  <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  <version>2021.1</version>  </dependency>  
</dependencies>
<!--spring cloud從2021.0.5版本起,Spring Cloud將不再默認啟用bootstrap,需要手動添加依賴。不引入bootstrap.properties/yml不生效-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

新建bootstrap.yml文件

Spring引入了一種新的配置文件:bootstrap.yaml。它的讀取流程如下:啟動項目 --> 讀取bootstrap.yaml文件 --> 找到nacos中,對應的配置文件 --> 讀取本地 application.yaml文件 ---> 創建容器 加載bean ...

因此,我們需要在bootstrap.yml文件中配置Nacos服務器地址和命名空間等信息,在spring中nacos配置中心的配置前綴是?spring.cloud.nacos.config。

spring:  application:  name: demo-app  cloud:  nacos:  discovery:  server-addr: localhost:8848 # Nacos服務地址  namespace: your-namespace-id # Nacos命名空間ID  config:  server-addr: localhost:8848 # Nacos作為配置中心地址  namespace: your-namespace-id # Nacos命名空間ID  group: your-group # 配置分組名稱  data-id: your-data-id # 配置ID,通常與spring.application.name相同  extension-configs:  - data-id: another-data-id # 另一個配置ID  group: ANOTHER_GROUP # 另一個配置分組名稱refresh: true  file-extension: yaml # 配置文件格式,默認為properties

或在bootstrap.properties文件中配置Nacos服務器地址和命名空間等信息

# bootstrap.properties  
spring.cloud.nacos.config.server-addr=127.0.0.1:8848  
spring.cloud.nacos.config.namespace=your-namespace  
spring.cloud.nacos.config.group=DEFAULT_GROUP  
spring.cloud.nacos.config.data-id=your-data-id  
spring.cloud.nacos.config.extension-configs[0].data-id=another-data-id  
spring.cloud.nacos.config.extension-configs[0].group=ANOTHER_GROUP  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

然后,新建兩個文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件內容如下,兩個文件內容格式是一樣的。

spring:  cloud:  nacos:  discovery:  server-addr: localhost:8848 # Nacos服務地址  namespace: your-namespace-id # Nacos命名空間ID  group: your-group # 配置分組名稱  config:  server-addr: localhost:8848 # Nacos作為配置中心地址  namespace: your-namespace-id # Nacos命名空間ID  group: your-group # 配置分組名稱  

在Nacos的配置中,discovery和config是兩個核心組件,它們各自承擔著不同的職責。

(1)Discovery(服務發現):

Discovery的主要作用是實現服務的自動注冊與發現。當服務提供者啟動后,它會自動將自己的服務信息注冊到Nacos中。而服務消費者則可以通過Nacos查詢和發現可用的服務提供者。這樣,服務消費者就能夠動態地獲取到服務提供者的網絡位置(如IP和端口),從而實現服務的調用。

服務發現在微服務架構中非常重要,因為它允許服務之間動態地相互發現和通信,而無需硬編碼服務地址。這使得服務能夠更靈活地部署和擴展,同時也提高了系統的可用性和容錯性。

(2)Config(配置管理):

Config的主要作用是實現配置信息的集中管理和動態更新。在微服務架構中,通常會有許多服務共享一些公共的配置信息,如數據庫連接信息、緩存配置等。Config允許將這些配置信息統一存儲在Nacos中,并通過配置中心進行管理和分發。當配置信息發生變化時,Config能夠實時地將最新的配置推送給服務消費者,從而實現配置的動態更新。

配置管理在微服務架構中同樣非常重要,因為它允許開發人員在不重啟服務的情況下更新配置信息。這大大提高了系統的靈活性和可維護性,同時也降低了運維成本。

(3)區別:

  • 服務發現(Discovery) 專注于服務的注冊與發現,解決的是服務之間的通信問題。它使得服務能夠動態地發現和調用其他服務,而無需硬編碼服務地址。
  • 配置管理(Config) 專注于配置信息的集中管理和動態更新,解決的是配置信息的共享和更新問題。它允許開發人員在不重啟服務的情況下實時更新配置信息,從而提高了系統的靈活性和可維護性。

原yml文件改造

可以保留程序啟動端口。

server:port:1839

3.啟動類注解

在Spring Boot啟動類上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,開啟服務發現和配置管理功能。

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

4.使用配置

在Spring Boot應用中,可以直接通過 @Value 或 @ConfigurationProperties 注解注入Nacos中的配置。@ConfigurationProperties和@Value注解用于獲取配置文件中的屬性定義并綁定到Java Bean或屬性中

通過@Value(“${xxxx}”)可以獲取屬性文件中對應的值,但是如果屬性文件中沒有這個屬性,則會報錯。可以通過賦予默認值解決這個問題,如@Value(“${xxxx:yyyy}”)。

@ConfigurationProperties注解對屬性綁定遵循relaxed bind rule【暫且翻譯為松散綁定規則】,并不需要精確匹配。所謂的寬松綁定原則是指:并不是 JavaBean 中的屬性必須要和配置文件中的一致才能綁定數據,context-path 也能綁定到 contextPath 屬性上。比如對屬性【app.username】,通過【app.userName】、【app.user-name】、【app.user_name】、【app.USER_NAME】、【app.USER-NAME】等都可匹配,我們可理解為模糊匹配。

@RestController
public class ConfigController {@Value("${your.config.key}")private String configValue;@GetMapping("/config")public String getConfig() {return configValue;}
}
@Data  // 需要提供默認的構造函數,以及get/setter方法
@ConfigurationProperties("my.service")
public class MyProperties {// 我們可以簡單地用一個值初始化一個字段來定義一個默認值private boolean enabled = true;private InetAddress remoteAddress;private final Security security = new Security();@Datapublic static class Security {private String username;private String password;// 如果這個屬性配置的話,默認是“USER”private List<String> roles = new ArrayList<>(Collections.singleton("USER"));}
}

在配置文件中進行如下配置,

my:service:enabled: trueremoteAddress: 127.0.0.1security:username: csxpassword: passwoedroles:- role1- role2
your:config:key:ccvvv

5.測試

最后,可以嘗試啟動項目程序,看看是否能啟動成功。如果啟動成功則說明成功了。

通過整合Nacos,Spring Boot項目能夠輕松實現配置的動態管理和服務的自動發現。Nacos的簡單易用和強大的功能使其成為微服務架構中不可或缺的一部分。通過本文的介紹和示例代碼,讀者應該能夠掌握Spring Boot與Nacos的集成方法,并在實際項目中高效利用Nacos進行服務配置管理。

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

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

相關文章

Electron-Vite 項目搭建(Vue)

前提條件 Node.js: 確保已安裝 Node.js 版本 18 或更高版本 (推薦使用最新穩定版)。Vite: 確保 Vite 版本為 4.0 或以上。包管理工具: 推薦使用 pnpm&#xff0c;但也可以使用 npm 或 yarn。 安裝 Electron-Vite 首先&#xff0c;在項目中安裝 electron-vite 作為開發依賴&a…

STM32F103單片機HAL庫串口通信卡死問題解決方法

在上篇文章 STM32F103單片機使用STM32CubeMX創建IAR串口工程 中分享了使用cubeMX直接生成串口代碼的方法&#xff0c;在測試的過程中無意間發現&#xff0c;串口會出現卡死的問題。 當串口一次性發送十幾個數據的時候&#xff0c;串口感覺像卡死了一樣&#xff0c;不再接收數據…

【Neo4J】neo4j docker容器下的備份與恢復

文章目錄 一. 官網說明1. 操作說明2. 注意事項 二. docker 容器化操作1. 導出&#xff08;備份&#xff09;停止容器執行備份 2. 導入&#xff08;恢復&#xff09;停止容器(如果未停止)執行導入 3. 啟動容器 一. 官網說明 https://neo4j.com/docs/operations-manual/current/…

selenium自動爬蟲工具

一、介紹selenium爬蟲工具 selenium 是一個自動化測試工具&#xff0c;可以用來進行 web 自動化測試、爬蟲 selenium 本質是通過驅動瀏覽器&#xff0c;完全模擬瀏覽器的操作&#xff0c;比如跳轉、輸入、點擊、下拉等&#xff0c;來拿到網頁渲染之后的結果&#xff0c;可支持…

Unity開發數字孿生項目

前言&#xff1a;記錄下自己用Unity開發數字孿生項目&#xff0c;所用到的知識點、功能點以及對項目認知總結&#xff0c;當然還有開發過程中所遇到的坑。此篇博客也是會隨時進行更新。 &#x1f60a;屏幕前看到此片文章的開發者們在此類項目開發過程中少走些彎路&#xff0c;希…

node利用路由搭建web實例

npm init npm i express body-parser cookie-parser 封裝web實例 搭建路由 導出web 應用實例注冊

量化交易系統開發-實時行情自動化交易-8.25.真格(澎博財經旗下)平臺

19年創業做過一年的量化交易但沒有成功&#xff0c;作為交易系統的開發人員積累了一些經驗&#xff0c;最近想重新研究交易系統&#xff0c;一邊整理一邊寫出來一些思考供大家參考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下來會對于真格&#xff08;澎博財經…

QT JSON文件解析

參考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打開文件&#xff0c;讀取全部內容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 讀…

面試常見-Java 原生實現常見數據結構

Java 原生實現常見數據結構 文章目錄 Java 原生實現常見數據結構一、引言二、數組&#xff08;Array&#xff09;&#xff08;一&#xff09;概念&#xff08;二&#xff09;代碼實現 三、鏈表&#xff08;Linked List&#xff09;&#xff08;一&#xff09;概念&#xff08;二…

1. 機器學習基本知識(5)——練習題(參考答案)

20.&#x1f517;本章代碼筆記&#x1f4d3;鏈接&#xff08;需要&#x1fa9c;&#xff09;&#xff1a;&#xff08;01_the_machine_learning_landscape.ipynb - Colab (google.com)&#xff09; 如果你不想通過上面的官方網址下載本章的筆記&#xff0c;還可以在本篇博文的…

通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應, 請問,這個 Dao 接口的工作原理是什么?Dao 接口里的方法, 參數不同時,方法能重載嗎?

Dao 接口 即 Mapper 接口 。接口 的 全 限 名 &#xff0c;就是 映 射 文 件 中 的 namespace 的值 &#xff1b; 接口 的 方 法 名 &#xff0c; 就 是 映 射 文 件 中 Mapper 的 Statement 的 id 值&#xff1b; 接 口 方 法 內 的 參數 &#xff0c; 就 是 傳 遞 給 sql 的參…

硬件設計 | Altium Designer軟件PCB規則設置

基于Altium Designer&#xff08;24.9.1&#xff09;版本 嘉立創PCB工藝加工能力范圍說明-嘉立創PCB打樣專業工廠-線路板打樣 規則參考-嘉立創 注意事項 1.每次設置完規則參數都要點擊應用保存 2.每次創建PCB&#xff0c;都要設置好參數 3.可以設置默認規則&#xff0c;將…

WebDAV服務不能上傳大文件,文件超過50M報錯[0x800700DF]怎么辦?

這個問題需要分別從服務端和客戶端解決。 1.Windows客戶端 解除50M文件限制&#xff0c;Windows訪問Webdav服務時&#xff0c;大于50M文件提示錯誤[錯誤:0x800700DF] 部署了webdav&#xff0c;Windows10映射網絡磁盤&#xff0c;傳輸文件超過大約50MB的文件會彈出“0x800700…

安全基礎學習-keil調試匯編代碼

初始目的是為了通過匯編編寫CRC功能。 但是基礎為0&#xff0c;所以目前從搭建工程開始記錄。 大佬繞路。 &#xff08;一&#xff09;創建項目 1. 新建項目 打開 Keil uVision。選擇 Project -> New uVision Project 創建一個新項目。選擇你的目標設備&#xff08;如 AR…

安裝qt 5.15.2筆記

撰文是2024年12月 最終實現了 1、用梯子下載了離線包5.14.2&#xff0c;最后沒用 2、用內地鏡像在線安裝5.15.2&#xff0c;3分鐘裝完 正文開始&#xff0c;qt官方簡稱官方。 官方包官方自5.15.X起&#xff0c;不再提供的exe/run安裝包https://download.qt.io/archive/qt/ …

Redis Java 集成到 Spring Boot

Hi~&#xff01;這里是奮斗的明志&#xff0c;很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~~ &#x1f331;&#x1f331;個人主頁&#xff1a;奮斗的明志 &#x1f331;&#x1f331;所屬專欄&#xff1a;Redis &#x1f4da;本系列文章為個人學習筆…

【Syncfusion系列】Diagram 雜談 第三篇 序列化和反序列化

目錄 序列化保存C# 代碼示例&#xff0c; 方式1 &#xff1a;C# 代碼示例&#xff0c; 方式2 &#xff1a; 反序列化加載C# 代碼示例, 方式1&#xff1a;C# 代碼示例, 方式2&#xff1a; **如何序列化自定義屬性**序列化和反序列化都存在的一個問題解決方式 圖表是否已修改&…

麒麟信安推出支持信創PC的新一代云桌面方案,助力政務信創高效安全運維

12月11日&#xff0c;在第二屆國家新一代自主安全計算系統產業集群融通生態大會上&#xff0c;麒麟信安發布了支持信創PC的新一代云桌面方案&#xff0c;該方案是基于國際TCI架構實現國產PC機云化納管在國內的首次發布&#xff0c;并與銀河麒麟桌面操作系統、長城國產PC整機實現…

中國科學院2001年數據結構試題

一、單項選擇題(每空2分&#xff0c;共20分) 1&#xff0e;下列函數中漸近時間復雜度最小的是( )。 A&#xff0e;T1(n)nlog2n5000n B&#xff0e;T2(n)n2-8000n C&#xff0e;T3(n)nlog221-6000n D&#xff0e;T4(n)2nlog2n-7000n 2&#xff0e;線性表的靜態鏈表存儲結構與順序…

MySQL數據表記錄刪操作

刪除操作&#xff1a;作用刪除表里的記錄行&#xff08;都是整行整行的刪除的&#xff09; 1.單表的刪除 語法 delete from 表名 where 要刪除的記錄篩選條件; 案例&#xff1a;刪除員工編號大于203的員工信息 delete from employees where employee_id>203; 2.多表的刪除…