這是本人學習的總結,主要學習資料如下
- 馬士兵教育
- 1、Overview
- 2、樣例
- 2.1、Dependency
- 2.2、配置文件的定位
- 2.3、bootstrap.yml
- 2.4、配置中心新增配置
- 2.5、驗證
1、Overview
配置中心用于管理配置項和配置文件,比如平時寫的application.yml
就是配置文件。
我們可以把配置文件存在配置中心中,然后動態獲取配置文件。更方便的是,我們可以動態修改配置文件,在不重啟系統的情況下更新配置。
2、樣例
我會建立一個Spring項目,將其注冊到Nacos中,然后從Nacos動態獲取配置。
2.1、Dependency
首先是作為一個普通的Client需要注冊到Nacos中,另外想要從Nacos中獲取配置則需要加上spring-cloud-starter-alibaba-nacos-config
這個依賴。
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
2.2、配置文件的定位
配置中心有多個配置文件,我們需要一些主鍵來定位確定我們的項目使用哪個配置文件。
配置文件的主鍵由namespace
,group
,spring.profiles.active
,spring.application.name
,spring.cloud.nacos.config.file-extension
組成,其中spring.profiles.active
,spring.application.name
,spring.cloud.nacos.config.file-extension
這三個組成一個叫dataId
的東西。
namespace
和注冊中心的意義相同。它通常代表著一個環境,所有的東西都要裝進一個namespace
里面。默認使用叫public
的命名空間,可以用spring.cloud.nacos.config.namespace
指定。group
也是和注冊中心的意義相同,它通常代表一個業務,比如order-group
。默認是DEFAULT_GROUP
,可以用spring.cloud.nacos.config.group
指定,要注意的是指定的是命名空間的id而不是name。spring.profiles.active
和spring.application.name
,Spring項目的配置。spring.cloud.nacos.config.file-extension
,表示配置文件的后綴名。dataId
,由spring.profiles.active
和spring.application.name
和spring.cloud.nacos.config.file-extension
三者組成,需要在配置中心填寫。組成規則是${spring.application.name}-${spring.profiles.active}.${file-extension}
。比如說applicationName
是nacos-config-client
,profile
是dev
,file-extension
是yaml
,那么dataId
就是nacos-config-client-dev.yaml
。
2.3、bootstrap.yml
我們需要配置關于配置中心的內容,比如配置中心的地址,配置中心的配置文件的后綴名等等。
所以關于配置中心的配置需要在項目啟動前加載。而bootstrap.yml
在application.ylm
之前加載,所以關于配置中心的配置我們都會選擇放在bootstrap.yml
中。
前面的配置是項目作為Nacos的Client需要配置的。只有在spring.cloud.nacos.config
才是關于配置中心的。該例子中設置了配置中心的地址是localhost:8848
,拉取后綴名是yaml
的文件。
# nacos配置
server:port: 3377spring:application:name: nacos-config-clientcloud:nacos:discovery:server-addr: localhost:8848 #Nacos服務注冊中心地址config:server-addr: localhost:8848 #Nacos作為配置中心地址file-extension: yaml #指定yaml格式的配置# group: DEFAULT_GROUP 默認值,不寫默認是DEFAULT_GROUP
這里或許會有些奇怪,配置中心那么多配置文件,不需要指定配置文件名可以獲取到我們想要的那個文件嗎?這里是涉及到dataId
的命名規則,在后續會講到。
application.yml
的內容比較簡單,只是設置了當前的profile
spring:profiles:active: dev
2.4、配置中心新增配置
點擊Nacos管理頁面右上角的加號就可以新增配置。
配置時有兩個值必填,一個是dataId
,另一個是group
。這兩個值相當于是該配置文件的主鍵。
dataId
,它的值必須遵循一定的規則。
dataId
必須是這樣的格式${spring.application.name}-${spring.profiles.active}.${file-extension}
。
在這里例子當中,spring.application.name=nacos-config-client
,springprofiles.active=dev
,file-extension=yaml
。
所以dataId
必須是nacos-config-client-dev.yaml
。只有這樣Nacos才知道當前新增的配置文件是屬于哪個Client的。
我們新增一個配置config.info=hello
。具體截圖如下,必須注意,每個冒號后面都要接一個空格。
而group
的默認值是DEFAULT_GROUP
,我們在bootstrap.yml
中不明確寫spring.cloud.nacos.config.group
的值的話,那Spring項目默認是拉取group=DEFAULT_GROUP的配置文件
。
2.5、驗證
用下面的代碼驗證系統是否讀取到了配置中心的配置。
注意@RefreshScope
這個注解,這個注解能讓我們一直獲取到最新的配置,并且不用重啟項目。
@RestController
@RefreshScope
public class ConfigController {@Value("${config.info}")private String configInfo;@GetMapping("/config/info")public String getConfigInfo(){return configInfo;}
}
獲取config.info
成功。