SpringBoot使用Nacos進行application.yml配置管理詳解
Nacos是阿里巴巴開源的一個微服務配置管理和服務發(fā)現的解決方案。它提供了動態(tài)服務發(fā)現、配置管理和 服務管理平臺。Nacos的核心功能包括服務發(fā)現、配置管理和動態(tài)服務管理,使得微服務架構下的服務治理 變得簡單高效。
Nacos的設計基于服務注冊與發(fā)現、配置管理、動態(tài)服務管理等核心功能,通過簡單的API和配置,實現了服 務的注冊與發(fā)現、配置的集中管理和動態(tài)更新。Nacos使用Raft協(xié)議保證配置的一致性,同時支持多種配置 格式,如properties、yaml等。

一、準備
首先需要在本地電腦上進行Nacos服務部署,默認端口是8848,部署成功之后,就可以去瀏覽器輸入localhost:8848進入nacos管理平臺。
二、nacos管理application.yml配置
1.nacos上新建命令空間和新建配置
首先,新建命名空間(如已存在則忽略),注意:命名空間ID可不填,不填則自動生成:
然后,進到nacos的管理頁面,在Nacos控制臺的左側導航欄進入配置列表,轉到“配置管理”頁面,點擊“+”來添加一個新的配置。
- Data ID:統(tǒng)一按照這個格式來: 服務名 - 環(huán)境 . 后綴名。主要是因為后面要導入的bootstrap.yaml Spring默認的讀取格式就是這樣的。
- Group:分組可以自定義,沒有需求可以選擇默認分組DEFAULT_GROUP。
- 命名空間:設置的命名空間ID。
- 配置格式:yaml。
在配置內容區(qū)域,輸入你想要暴露給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文件 —> 創(chuàng)建容器 加載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(服務發(fā)現):
Discovery的主要作用是實現服務的自動注冊與發(fā)現。當服務提供者啟動后,它會自動將自己的服務信息注冊到Nacos中。而服務消費者則可以通過Nacos查詢和發(fā)現可用的服務提供者。這樣,服務消費者就能夠動態(tài)地獲取到服務提供者的網絡位置(如IP和端口),從而實現服務的調用。
服務發(fā)現在微服務架構中非常重要,因為它允許服務之間動態(tài)地相互發(fā)現和通信,而無需硬編碼服務地址。這使得服務能夠更靈活地部署和擴展,同時也提高了系統(tǒng)的可用性和容錯性。
(2)Config(配置管理):
Config的主要作用是實現配置信息的集中管理和動態(tài)更新。在微服務架構中,通常會有許多服務共享一些公共的配置信息,如數據庫連接信息、緩存配置等。
Config允許將這些配置信息統(tǒng)一存儲在Nacos中,并通過配置中心進行管理和分發(fā)。當配置信息發(fā)生變化時,Config能夠實時地將最新的配置推送給服務消費者,從而實現配置的動態(tài)更新。
配置管理在微服務架構中同樣非常重要,因為它允許開發(fā)人員在不重啟服務的情況下更新配置信息。這大大提高了系統(tǒng)的靈活性和可維護性,同時也降低了運維成本。
(3)區(qū)別:
- 服務發(fā)現(Discovery) 專注于服務的注冊與發(fā)現,解決的是服務之間的通信問題。它使得服務能夠動態(tài)地發(fā)現和調用其他服務,而無需硬編碼服務地址。
- 配置管理(Config) 專注于配置信息的集中管理和動態(tài)更新,解決的是配置信息的共享和更新問題。它允許開發(fā)人員在不重啟服務的情況下實時更新配置信息,從而提高了系統(tǒng)的靈活性和可維護性。
原yml文件改造
可以保留程序啟動端口。
server:
port:1839
3.啟動類注解
在Spring Boot啟動類上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,開啟服務發(fā)現和配置管理功能。
@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(“x x x x ” ) 可以獲取屬性文件中對應的值,但是如果屬性文件中沒有這個屬性,則會報錯??梢酝ㄟ^賦予默認值解決這個問題,如 @ V a l u e ( “ {xxxx}”)可以獲取屬性文件中對應的值,但是如果屬性文件中沒有這個屬性,則會報錯??梢酝ㄟ^賦予默認值解決這個問題,如@Value(“xxxx”)可以獲取屬性文件中對應的值,但是如果屬性文件中沒有這個屬性,則會報錯??梢酝ㄟ^賦予默認值解決這個問題,如@Value(“{xxxx:yyyy}”)。
@ConfigurationProperties注解對屬性綁定遵循relaxed bind rule【暫且翻譯為松散綁定規(guī)則】,并不需要精確匹配。所謂的寬松綁定原則是指:并不是 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();
@Data
public static class Security {
private String username;
private String password;
// 如果這個屬性配置的話,默認是“USER”
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
}
}
在配置文件中進行如下配置,
my:
service:
enabled: true
remoteAddress: 127.0.0.1
security:
username: csx
password: passwoed
roles:
- role1
- role2
your:
config:
key:ccvvv
5.測試
最后,可以嘗試啟動項目程序,看看是否能啟動成功。如果啟動成功則說明成功了。
通過整合Nacos,Spring Boot項目能夠輕松實現配置的動態(tài)管理和服務的自動發(fā)現。Nacos的簡單易用和強大的功能使其成為微服務架構中不可或缺的一部分。通過本文的介紹和示例代碼,讀者應該能夠掌握Spring Boot與Nacos的集成方法,并在實際項目中高效利用Nacos進行服務配置管理。
以上就是SpringBoot使用Nacos進行application.yml配置管理詳解的詳細內容,更多關于SpringBoot application.yml配置管理的資料請關注腳本之家其它相關文章!
相關文章
Java?@SpringBootApplication注解深入解析
這篇文章主要給大家介紹了關于Java?@SpringBootApplication注解的相關資料,@SpringBootApplication這個注解是Spring?Boot項目的基石,創(chuàng)建SpringBoot項目之后會默認在主類加上,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-02-02
Dependency ‘XXX:‘ not found問題的三步解決
這篇文章主要介紹了Dependency ‘XXX:‘ not found問題的三步解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
SpringBoot使用Editor.md構建Markdown富文本編輯器示例
這篇文章主要介紹了SpringBoot使用Editor.md構建Markdown富文本編輯器示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03

