SpringBoot使用Nacos進(jìn)行application.yml配置管理
引言
Nacos是阿里巴巴開(kāi)源的一個(gè)微服務(wù)配置管理和服務(wù)發(fā)現(xiàn)的解決方案。它提供了動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和 服務(wù)管理平臺(tái)。Nacos的核心功能包括服務(wù)發(fā)現(xiàn)、配置管理和動(dòng)態(tài)服務(wù)管理,使得微服務(wù)架構(gòu)下的服務(wù)治理 變得簡(jiǎn)單高效。
Nacos的設(shè)計(jì)基于服務(wù)注冊(cè)與發(fā)現(xiàn)、配置管理、動(dòng)態(tài)服務(wù)管理等核心功能,通過(guò)簡(jiǎn)單的API和配置,實(shí)現(xiàn)了服 務(wù)的注冊(cè)與發(fā)現(xiàn)、配置的集中管理和動(dòng)態(tài)更新。Nacos使用Raft協(xié)議保證配置的一致性,同時(shí)支持多種配置 格式,如properties、yaml等。
一、準(zhǔn)備
首先需要在本地電腦上進(jìn)行Nacos服務(wù)部署,默認(rèn)端口是8848,部署成功之后,就可以去瀏覽器輸入localhost:8848進(jìn)入nacos管理平臺(tái)。
二、nacos管理application.yml配置
1.nacos上新建命令空間和新建配置
首先,新建命名空間(如已存在則忽略),注意:命名空間ID可不填,不填則自動(dòng)生成:
然后,進(jìn)到nacos的管理頁(yè)面,在Nacos控制臺(tái)的左側(cè)導(dǎo)航欄進(jìn)入配置列表,轉(zhuǎn)到“配置管理”頁(yè)面,點(diǎn)擊“+”來(lái)添加一個(gè)新的配置。
- Data ID:統(tǒng)一按照這個(gè)格式來(lái): 服務(wù)名 - 環(huán)境 . 后綴名。主要是因?yàn)楹竺嬉獙?dǎo)入的bootstrap.yaml Spring默認(rèn)的讀取格式就是這樣的。
- Group:分組可以自定義,沒(méi)有需求可以選擇默認(rèn)分組DEFAULT_GROUP。
- 命名空間:設(shè)置的命名空間ID。
- 配置格式:yaml。
在配置內(nèi)容區(qū)域,輸入你想要暴露給Spring Boot應(yīng)用的配置信息??梢詮腟pringBoot獲取yml配置信息,將需要配置到config的信息復(fù)制配置到配置內(nèi)容中。
至此,nacos側(cè)配置項(xiàng)已完成,接下來(lái)進(jìn)行SpringBoot項(xiàng)目配置改造。
2.SpringBoot項(xiàng)目配置改造
pom文件引入依賴(lài)
首先修改Spring Boot項(xiàng)目的pom.xml文件,在pom.xml文件中添加Nacos Config和Nacos Discovery的依賴(lài)。
<!--nacos配置管理依賴(lài)--> <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將不再默認(rèn)啟用bootstrap,需要手動(dòng)添加依賴(lài)。不引入bootstrap.properties/yml不生效--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
新建bootstrap.yml文件
Spring引入了一種新的配置文件:bootstrap.yaml。它的讀取流程如下:?jiǎn)?dòng)項(xiàng)目 --> 讀取bootstrap.yaml文件 --> 找到nacos中,對(duì)應(yīng)的配置文件 --> 讀取本地 application.yaml文件 ---> 創(chuàng)建容器 加載bean ...
因此,我們需要在bootstrap.yml文件中配置Nacos服務(wù)器地址和命名空間等信息,在spring中nacos配置中心的配置前綴是 spring.cloud.nacos.config。
spring: application: name: demo-app cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服務(wù)地址 namespace: your-namespace-id # Nacos命名空間ID config: server-addr: localhost:8848 # Nacos作為配置中心地址 namespace: your-namespace-id # Nacos命名空間ID group: your-group # 配置分組名稱(chēng) data-id: your-data-id # 配置ID,通常與spring.application.name相同 extension-configs: - data-id: another-data-id # 另一個(gè)配置ID group: ANOTHER_GROUP # 另一個(gè)配置分組名稱(chēng) refresh: true file-extension: yaml # 配置文件格式,默認(rèn)為properties
或在bootstrap.properties文件中配置Nacos服務(wù)器地址和命名空間等信息
# 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
然后,新建兩個(gè)文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件內(nèi)容如下,兩個(gè)文件內(nèi)容格式是一樣的。
spring: cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服務(wù)地址 namespace: your-namespace-id # Nacos命名空間ID group: your-group # 配置分組名稱(chēng) config: server-addr: localhost:8848 # Nacos作為配置中心地址 namespace: your-namespace-id # Nacos命名空間ID group: your-group # 配置分組名稱(chēng)
在Nacos的配置中,discovery和config是兩個(gè)核心組件,它們各自承擔(dān)著不同的職責(zé)。
(1)Discovery(服務(wù)發(fā)現(xiàn)):
Discovery的主要作用是實(shí)現(xiàn)服務(wù)的自動(dòng)注冊(cè)與發(fā)現(xiàn)。當(dāng)服務(wù)提供者啟動(dòng)后,它會(huì)自動(dòng)將自己的服務(wù)信息注冊(cè)到Nacos中。而服務(wù)消費(fèi)者則可以通過(guò)Nacos查詢(xún)和發(fā)現(xiàn)可用的服務(wù)提供者。這樣,服務(wù)消費(fèi)者就能夠動(dòng)態(tài)地獲取到服務(wù)提供者的網(wǎng)絡(luò)位置(如IP和端口),從而實(shí)現(xiàn)服務(wù)的調(diào)用。
服務(wù)發(fā)現(xiàn)在微服務(wù)架構(gòu)中非常重要,因?yàn)樗试S服務(wù)之間動(dòng)態(tài)地相互發(fā)現(xiàn)和通信,而無(wú)需硬編碼服務(wù)地址。這使得服務(wù)能夠更靈活地部署和擴(kuò)展,同時(shí)也提高了系統(tǒng)的可用性和容錯(cuò)性。
(2)Config(配置管理):
Config的主要作用是實(shí)現(xiàn)配置信息的集中管理和動(dòng)態(tài)更新。在微服務(wù)架構(gòu)中,通常會(huì)有許多服務(wù)共享一些公共的配置信息,如數(shù)據(jù)庫(kù)連接信息、緩存配置等。Config允許將這些配置信息統(tǒng)一存儲(chǔ)在Nacos中,并通過(guò)配置中心進(jìn)行管理和分發(fā)。當(dāng)配置信息發(fā)生變化時(shí),Config能夠?qū)崟r(shí)地將最新的配置推送給服務(wù)消費(fèi)者,從而實(shí)現(xiàn)配置的動(dòng)態(tài)更新。
配置管理在微服務(wù)架構(gòu)中同樣非常重要,因?yàn)樗试S開(kāi)發(fā)人員在不重啟服務(wù)的情況下更新配置信息。這大大提高了系統(tǒng)的靈活性和可維護(hù)性,同時(shí)也降低了運(yùn)維成本。
(3)區(qū)別:
- 服務(wù)發(fā)現(xiàn)(Discovery) 專(zhuān)注于服務(wù)的注冊(cè)與發(fā)現(xiàn),解決的是服務(wù)之間的通信問(wèn)題。它使得服務(wù)能夠動(dòng)態(tài)地發(fā)現(xiàn)和調(diào)用其他服務(wù),而無(wú)需硬編碼服務(wù)地址。
- 配置管理(Config) 專(zhuān)注于配置信息的集中管理和動(dòng)態(tài)更新,解決的是配置信息的共享和更新問(wèn)題。它允許開(kāi)發(fā)人員在不重啟服務(wù)的情況下實(shí)時(shí)更新配置信息,從而提高了系統(tǒng)的靈活性和可維護(hù)性。
原yml文件改造
可以保留程序啟動(dòng)端口。
server: port:1839
3.啟動(dòng)類(lèi)注解
在Spring Boot啟動(dòng)類(lèi)上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,開(kāi)啟服務(wù)發(fā)現(xiàn)和配置管理功能。
@SpringBootApplication @EnableDiscoveryClient @EnableConfigServer public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
4.使用配置
在Spring Boot應(yīng)用中,可以直接通過(guò) @Value 或 @ConfigurationProperties 注解注入Nacos中的配置。@ConfigurationProperties和@Value注解用于獲取配置文件中的屬性定義并綁定到Java Bean或?qū)傩灾小?/p>
通過(guò)@Value(“${xxxx}”)可以獲取屬性文件中對(duì)應(yīng)的值,但是如果屬性文件中沒(méi)有這個(gè)屬性,則會(huì)報(bào)錯(cuò)。可以通過(guò)賦予默認(rèn)值解決這個(gè)問(wèn)題,如@Value(“${xxxx:yyyy}”)。
@ConfigurationProperties注解對(duì)屬性綁定遵循relaxed bind rule【暫且翻譯為松散綁定規(guī)則】,并不需要精確匹配。所謂的寬松綁定原則是指:并不是 JavaBean 中的屬性必須要和配置文件中的一致才能綁定數(shù)據(jù),context-path 也能綁定到 contextPath 屬性上。比如對(duì)屬性【app.username】,通過(guò)【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 // 需要提供默認(rèn)的構(gòu)造函數(shù),以及get/setter方法 @ConfigurationProperties("my.service") public class MyProperties { // 我們可以簡(jiǎn)單地用一個(gè)值初始化一個(gè)字段來(lái)定義一個(gè)默認(rèn)值 private boolean enabled = true; private InetAddress remoteAddress; private final Security security = new Security(); @Data public static class Security { private String username; private String password; // 如果這個(gè)屬性配置的話,默認(rèn)是“USER” private List<String> roles = new ArrayList<>(Collections.singleton("USER")); } }
在配置文件中進(jìn)行如下配置,
my: service: enabled: true remoteAddress: 127.0.0.1 security: username: csx password: passwoed roles: - role1 - role2 your: config: key:ccvvv
5.測(cè)試
最后,可以嘗試啟動(dòng)項(xiàng)目程序,看看是否能啟動(dòng)成功。如果啟動(dòng)成功則說(shuō)明成功了。
通過(guò)整合Nacos,Spring Boot項(xiàng)目能夠輕松實(shí)現(xiàn)配置的動(dòng)態(tài)管理和服務(wù)的自動(dòng)發(fā)現(xiàn)。Nacos的簡(jiǎn)單易用和強(qiáng)大的功能使其成為微服務(wù)架構(gòu)中不可或缺的一部分。通過(guò)本文的介紹和示例代碼,讀者應(yīng)該能夠掌握Spring Boot與Nacos的集成方法,并在實(shí)際項(xiàng)目中高效利用Nacos進(jìn)行服務(wù)配置管理。
以上就是SpringBoot使用Nacos進(jìn)行application.yml配置管理的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot application.yml配置管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot配置文件的優(yōu)先級(jí)順序、加載順序、bootstrap.yml與application.yml區(qū)別及說(shuō)明
- SpringBoot項(xiàng)目部署時(shí)application.yml文件的加載優(yōu)先級(jí)和啟動(dòng)腳本問(wèn)題
- springboot的application.yml配置port不生效的解決方案
- 解決springboot application.yml變灰色的問(wèn)題
- springboot中application.yml多環(huán)境生效規(guī)則說(shuō)明
- SpringBoot中application.yml基本配置解讀
相關(guān)文章
JUC系列學(xué)習(xí)工具類(lèi)CountDownLatch詳解
這篇文章主要介紹了JUC系列學(xué)習(xí)工具類(lèi)CountDownLatch詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可任意參考一下2022-08-08圖解紅黑樹(shù)及Java進(jìn)行紅黑二叉樹(shù)遍歷的方法
紅黑樹(shù)問(wèn)題是各大計(jì)算機(jī)考研命題以及面試算法題目中的熱門(mén),接下來(lái)我們?yōu)榇蠹覉D解紅黑樹(shù)及Java進(jìn)行紅黑二叉樹(shù)遍歷的方法,需要的朋友可以參考下2016-05-05SpringBoot中的static靜態(tài)資源訪問(wèn)、參數(shù)配置、代碼自定義訪問(wèn)規(guī)則詳解
這篇文章主要介紹了SpringBoot的static靜態(tài)資源訪問(wèn)、參數(shù)配置、代碼自定義訪問(wèn)規(guī)則,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Java正則表達(dá)式之Pattern和Matcher的使用
本文詳細(xì)介紹了Java中處理正則表達(dá)式的Pattern和Matcher類(lèi)的使用方法和實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09關(guān)于@Autowired的使用及注意事項(xiàng)
這篇文章主要介紹了關(guān)于@Autowired的使用及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Mybatis執(zhí)行SQL時(shí)多了一個(gè)limit的問(wèn)題及解決方法
這篇文章主要介紹了Mybatis執(zhí)行SQL時(shí)多了一個(gè)limit的問(wèn)題及解決方法,Mybatis攔截器方法識(shí)別到配置中參數(shù)supportMethodsArguments 為ture時(shí)會(huì)分頁(yè)處理,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-10-10SpringBoot中的靜態(tài)資源訪問(wèn)的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot中的靜態(tài)資源訪問(wèn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫(kù)存的項(xiàng)目實(shí)踐
在開(kāi)發(fā)中,異步任務(wù)應(yīng)用的場(chǎng)景非常的廣泛,本文主要介紹了SpringBoot異步任務(wù)實(shí)現(xiàn)下單校驗(yàn)庫(kù)存的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09