SpringBoot3整合Nacos?V2.3.2的詳細過程
隨著微服務(wù)架構(gòu)的廣泛應(yīng)用,服務(wù)注冊與發(fā)現(xiàn)的需求變得越來越重要。Nacos(Dynamic Naming and Configuration Service 首字母)作為一個開源的、動態(tài)的服務(wù)發(fā)現(xiàn)與配置管理平臺,已成為許多開發(fā)者的首選工具。Spring Boot 與 Nacos 的整合能夠幫助開發(fā)者快速實現(xiàn)服務(wù)注冊、配置管理以及動態(tài)控制等功能。
本文將詳細介紹如何將 Spring Boot 3.2.x 和 Nacos 2.3.2 進行整合,包括功能介紹、版本依賴、整合過程中的細節(jié)及效果演示。
1. Nacos 簡介與功能
Nacos 是一個易于使用的、支持多種服務(wù)發(fā)現(xiàn)和配置管理的開源項目。它提供了如下核心功能:
- 服務(wù)發(fā)現(xiàn)與健康檢查:支持通過 HTTP、DNS 和 gRPC 協(xié)議進行服務(wù)注冊與發(fā)現(xiàn),同時可以對注冊的服務(wù)進行健康檢查。
- 動態(tài)配置管理:提供配置管理功能,允許開發(fā)者在不重啟服務(wù)的情況下修改應(yīng)用配置,并實時生效。
- 動態(tài) DNS 服務(wù):支持通過 DNS 查詢服務(wù)實例的地址,實現(xiàn)更加靈活的服務(wù)發(fā)現(xiàn)。
- 分布式配置管理:能夠為不同的環(huán)境、應(yīng)用提供差異化的配置管理。
版本說明
Nacos 1.x 已經(jīng)停止功能維護,請盡快升級到 2.x 版本。并且 Nacos 版本依賴 SpringBoot、Spring Cloud 的版本,對于剛剛升級到 springboot3 的小伙伴來說,會遇到很多莫名其妙的問題,大多數(shù)都是由于版本依賴造成的問題,建議直接到官網(wǎng)找推薦的版本組合,springcloud alibaba與springboot版本對應(yīng)。
親測 SpringBoot 3.2.x + Nacos 2.3.2 + SpringCloud 2023.0.1.0 組合可用,下面介紹也將基于此版本組合講解。
2. Spring Boot 3.2.x 與 Nacos 2.3.2 整合的步驟
2.1 運行Nacos服務(wù)
多種運行方式見官網(wǎng):https://nacos.io/docs/latest/quickstart/quick-start/,本地直接使用docker安裝即可運行。
Nacos 2.x 除了 8848 端口以為還需要占用以下端口,如果云服務(wù)器部署需要放行端口號。
兼容性說明見:https://nacos.io/docs/v2/upgrading/version2-compatibility/
運行nacos服務(wù)后,還需設(shè)置密碼,創(chuàng)建命名空間,新建配置等。
2.2 添加依賴
首先,你需要在 Spring Boot 項目中添加 Nacos 的相關(guān)依賴。Nacos 提供了一個官方的 Spring Cloud Alibaba 依賴包來支持 Spring Boot 項目的集成。
修改 pom.xml
文件,添加如下依賴:
<dependencies> <!-- Spring Boot Web依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot與Nacos整合的核心依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2023.0.1.0</version> <!-- 與Spring Boot 3.2.x兼容 --> </dependency> <!-- 配置管理依賴,如果你需要配置管理功能 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2023.0.1.0</version> </dependency> <!--提供了引導(dǎo)配置的支持,允許應(yīng)用程序在啟動時從外部配置中心(如 Nacos、Consul、Config Server 等)加載配置。--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>4.1.4</version> </dependency> </dependencies>
注意:這里的
spring-cloud-starter-alibaba-nacos-discovery
和spring-cloud-starter-alibaba-nacos-config
是 Spring Cloud Alibaba 相關(guān)的 starter。2023.0.1.0
版本與 Spring Boot 3.2.x 兼容。
2.3 配置 Nacos 連接
在 bootstrap.properties
或 bootstrap.yml
文件中,配置 Nacos 服務(wù)的連接信息。配置如下:
為什么要bootstrap.yml?用在應(yīng)用程序啟動的早期階段,通過 bootstrap.yml 或 bootstrap.properties 文件加載配置,這些配置可以在主應(yīng)用配置之前生效。spring-cloud-starter-bootstrap 提供了引導(dǎo)配置的支持。
spring: application: name: spring-boot3-14-nacos profiles: active: local # 切換環(huán)境 cloud: nacos: config: server-addr: 1.94.x.x:8848 namespace: c77472dd-768c-42b0-8755-b6d87af491cf # 填命名空間id file-extension: yaml group: DEFAULT_GROUP refresh-enabled: true # 如果開啟認證的話需要用戶名和密碼 username: nacosu password: nacosu discovery: server-addr: 1.94.26.81:8848 namespace: c77472dd-768c-42b0-8755-b6d87af491cf # 如果開啟認證的話需要用戶名和密碼 username: nacosu password: nacosu
配置項說明
更多關(guān)于 spring-cloud-starter-alibaba-nacos-config 的 starter 配置項如下所示:
配置項 | key | 默認值 | 說明 |
---|---|---|---|
服務(wù)端地址 | spring.cloud.nacos.config.server-addr | 服務(wù)器 ip 和端口 | |
DataId 前綴 | spring.cloud.nacos.config.prefix | ${spring.application.name} | DataId 的前綴,默認值為應(yīng)用名稱 |
Group | spring.cloud.nacos.config.group | DEFAULT_GROUP | 分組 |
DataId 后綴及內(nèi)容文件格式 | spring.cloud.nacos.config.file-extension | properties | DataId 的后綴,同時也是配置內(nèi)容的文件格式,目前只支持 properties、yaml |
配置內(nèi)容的編碼方式 | spring.cloud.nacos.config.encode | UTF-8 | 配置的編碼 |
獲取配置的超時時間 | spring.cloud.nacos.config.timeout | 3000 | 單位為 ms |
配置的命名空間 | spring.cloud.nacos.config.namespace | 常用場景之一是不同環(huán)境的配置的區(qū)分隔離,例如開發(fā)測試環(huán)境和生產(chǎn)環(huán)境的資源隔離等。 | |
AccessKey | spring.cloud.nacos.config.access-key | ||
SecretKey | spring.cloud.nacos.config.secret-key | ||
相對路徑 | spring.cloud.nacos.config.context-path | 服務(wù)端 API 的相對路徑 | |
接入點 | spring.cloud.nacos.config.endpoint | 地域的某個服務(wù)的入口域名,通過此域名可以動態(tài)地拿到服務(wù)端地址 | |
是否開啟監(jiān)聽和自動刷新 | spring.cloud.nacos.config.refresh-enabled | true | |
集群服務(wù)名 | spring.cloud.nacos.config.cluster-name |
推薦方式
由于配置寫到配置文件中,不便于修改不同環(huán)境的參數(shù),且容易泄露敏感信息,一般建議如下寫法:
spring: application: name: spring-boot3-14-nacos profiles: active: ${PROFILE} cloud: nacos: discovery: server-addr: ${DISCOVERY_SVC} namespace: ${NAMESPACE_ID} username: ${NACOS_USER} password: ${NACOS_PWD} config: server-addr: ${DISCOVERY_SVC} namespace: ${NAMESPACE_ID} group: ${GROUP} file-extension: yaml username: ${NACOS_USER} password: ${NACOS_PWD}
啟動時使用命令行參數(shù)給配置賦值:
--spring.application.json={\"PROFILE\":\"dev\",\"DISCOVERY_SVC\":\"1.94.x.x:8848\",\"NAMESPACE\":\"demo\",\"GROUP\":\"DEFAULT_GROUP\",\"NAMESPACE_ID\":\"c77472dd-768c-42b0-8755-b6d87af491cf\",\"NACOS_USER\":\"nacosu\",\"NACOS_PWD\":\"nacosu\"}
2.4 配置 Nacos 注冊與發(fā)現(xiàn)
在 @SpringBootApplication
或其他配置類上添加 @EnableDiscoveryClient
啟用 Nacos 服務(wù)發(fā)現(xiàn)功能:
@SpringBootApplication @EnableDiscoveryClient public class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); } @RestController class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } } }
2.5 配置 Nacos 動態(tài)配置功能
如果你想使用 Nacos 的配置管理功能,可以在應(yīng)用中添加配置類, Spring Cloud 原生注解 @RefreshScope
實現(xiàn)配置自動更新:
代碼示例
@RestController @RequestMapping("/config") @RefreshScope public class ConfigController { @Value("${useLocalCache:false}") private boolean useLocalCache; @RequestMapping("/get") public boolean get() { return useLocalCache; } }
效果
3. 常見問題與解決方法
3.1 連接 Nacos 失敗
如果 Spring Boot 應(yīng)用無法連接 Nacos 服務(wù),可能是以下原因:
- 檢查
spring.cloud.nacos.discovery.server-addr
配置項的地址是否正確。 - 確保 Nacos 服務(wù)端口未被防火墻或其他網(wǎng)絡(luò)配置阻塞,8848、9848、9845。
- 配置文件未使用 bootstrap.yml 或者 bootstrap.properties 。
3.2 服務(wù)未能成功注冊到 Nacos
- 確認
@EnableDiscoveryClient
注解是否正確添加到啟動類。 - 確認
spring.application.name
配置項是否設(shè)置為應(yīng)用名稱。 - 檢查 Nacos 控制臺中是否存在其他錯誤信息。
3.3 服務(wù)注冊成功,配置拿不到
首先排除掉版本兼容問題,其他可能原因:
- namespace 配置項錯誤填入了 namesapce 名稱,應(yīng)該填 namespaceId。
dataId
的完整格式${prefix}-${spring.profiles.active}.${file-extension}
,當spring.profiles.active
為空時,對應(yīng)的連接符-
也將不存在,dataId 的拼接格式變成${prefix}.${file-extension}
3.4 No spring.config.import property has been defined
產(chǎn)生問題的原因是 bootstrap.yml 比 application.properties 的優(yōu)先級要高。由于 bootstrap.yml 是系統(tǒng)級的資源配置文件,是用在程序引導(dǎo)執(zhí)行時更加早期配置信息讀??;但是在SpringCloud 2020.* 以后版本把 bootstrap 禁用了,導(dǎo)致在讀取文件的時候讀取不到而報錯,所以我們只要把 bootstrap 從新導(dǎo)入進來就會生效了。
<!--提供了引導(dǎo)配置的支持,允許應(yīng)用程序在啟動時從外部配置中心(如 Nacos、Consul、Config Server 等)加載配置。--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>4.1.4</version> </dependency>
4. 總結(jié)
本文介紹了如何在 Spring Boot 3.2.x 項目中整合 Nacos 2.3.2,包括依賴配置、Nacos 服務(wù)發(fā)現(xiàn)與動態(tài)配置的配置方法。通過整合 Nacos,Spring Boot 應(yīng)用可以實現(xiàn)高效的服務(wù)發(fā)現(xiàn)、動態(tài)配置管理以及分布式系統(tǒng)中的靈活擴展。希望通過本篇博客,您能順利完成 Spring Boot 與 Nacos 的整合,并提升開發(fā)效率和系統(tǒng)的靈活性。
到此這篇關(guān)于SpringBoot3-如何整合Nacos V2.3.2的文章就介紹到這了,更多相關(guān)SpringBoot整合Nacos內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java設(shè)計模式—靜態(tài)代理模式(聚合與繼承方式對比)
下面小編就為大家?guī)硪黄猨ava設(shè)計模式—靜態(tài)代理模式(聚合與繼承方式對比)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05教你利用JAVA實現(xiàn)可以自行關(guān)閉服務(wù)器的方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著利用JAVA實現(xiàn)可以自行關(guān)閉服務(wù)器的方法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06MyBatis后端對數(shù)據(jù)庫進行增刪改查等操作實例
Mybatis是appach下開源的一款持久層框架,通過xml與java文件的緊密配合,避免了JDBC所帶來的一系列問題,下面這篇文章主要給大家介紹了關(guān)于MyBatis后端對數(shù)據(jù)庫進行增刪改查等操作的相關(guān)資料,需要的朋友可以參考下2022-08-08SpringBoot?AOP中JoinPoint的使用方式和通知切點表達式
這篇文章主要介紹了SpringBoot?AOP中JoinPoint的使用方式和通知切點表達式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05使用JMeter從JSON響應(yīng)的URL參數(shù)中提取特定值
在使用Apache JMeter進行API測試時,我們經(jīng)常需要從JSON格式的響應(yīng)中提取特定字段的值,這可以通過使用JMeter內(nèi)置的JSON提取器和正則表達式提取器來完成,本文介紹JMeter JSON提取特定值的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2024-03-03