Nacos配置中心
一、配置中心介紹
1、Spring Cloud Config
Spring Cloud Config 為分布式系統的外部配置提供了服務端和客戶端的支持方案。在配置的服務端您可以在所有環境中為應用程序管理外部屬性的中心位置。客戶端和服務端概念上的Spring Environment 和 PropertySource 抽象保持同步, 它們非常適合Spring應用程序,但是可以與任何語言中運行的應用程序一起使用。當應用程序在部署管道中從一個開發到測試直至進入生產時,您可以管理這些環境之間的配置,並確保應用程序在遷移時具有它們需要運行的所有內容。服務器存儲后端的默認實現使用git,因此它很容易支持標記版本的配置環境,並且能夠被管理內容的各種工具訪問。很容易添加替代的實現,並用Spring配置將它們插入。
Spring Cloud Config 包含了Client和Server兩個部分,server提供配置文件的存儲、以接口的形式將配置文件的內容提供出去,client通過接口獲取數據、並依據此數據初始化自己的應用。Spring cloud使用git或svn存放配置文件,默認情況下使用git。
2、Nacos替換Config
Nacos 可以與 Spring, Spring Boot, Spring Cloud 集成,並能代替 Spring Cloud Eureka, Spring Cloud Config。通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現配置的動態變更。
(1)應用場景
在系統開發過程中,開發者通常會將一些需要變更的參數、變量等從代碼中分離出來獨立管理,以獨立的配置文件的形式存在。目的是讓靜態的系統工件或者交付物(如 WAR,JAR 包等)更好地和實際的物理運行環境進行適配。配置管理一般包含在系統部署的過程中,由系統管理員或者運維人員完成。配置變更是調整系統運行時的行為的有效手段。
如果微服務架構中沒有使用統一配置中心時,所存在的問題:
- 配置文件分散在各個項目里,不方便維護
- 配置內容安全與權限
- 更新配置后,項目需要重啟
nacos配置中心:系統配置的集中管理(編輯、存儲、分發)、動態更新不重啟、回滾配置(變更管理、歷史版本管理、變更審計)等所有與配置相關的活動。
二、讀取Nacos配置中心的配置文件
1、啟動Nacos服務
2、進入Nacos管理頁面,默認用戶名和密碼nacos
3、在Nacos配置中心創建配置文件
(1)點擊創建按鈕
(2)輸入配置信息
上邊的配置信息就是之前properties配置文件的值,我的如下:
# 服務端口 server.port=8008 # 服務名 spring.application.name=service-statistics # mysql數據庫連接 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/zxjy?serverTimezone=GMT%2B8&useSSL=false spring.datasource.username=root spring.datasource.password=123 #返回json的全局時間格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 #配置mapper xml文件的路徑 mybatis-plus.mapper-locations=classpath:com/stu/staservice/mapper/xml/*.xml #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # nacos服務地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
a)Data ID 的完整規則格式如下
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默認為所屬工程配置spring.application.name 的值(即:nacos-provider),也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
- spring.profiles.active=dev 即為當前環境對應的 profile。 注意:當 spring.profiles.active 為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}
- file-exetension 為配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。
4、添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
5、創建bootstrap.properties配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#spring.profiles.active=dev
# 該配置影響統一配置中心中的dataId
spring.application.name=service-statistics
把項目之前的application.properties內容注釋,啟動項目查看效果
6、補充:springboot配置文件加載順序
其實yml和properties文件是一樣的原理,且一個項目上要么yml或者properties,二選一的存在。推薦使用yml,更簡潔。
bootstrap與application
(1)加載順序
這里主要是說明application和bootstrap的加載順序。
bootstrap.yml(bootstrap.properties)先加載
application.yml(application.properties)后加載
bootstrap.yml 用於應用程序上下文的引導階段。
bootstrap.yml 由父Spring ApplicationContext加載。
父ApplicationContext 被加載到使用 application.yml 的之前。
(2)配置區別
bootstrap.yml 和application.yml 都可以用來配置參數。
bootstrap.yml 可以理解成系統級別的一些參數配置,這些參數一般是不會變動的。
application.yml 可以用來定義應用級別的。
7、修改項目bootstrap.properties配置文件,添加一行配置(用於配置多個開發環境)
1、修改項目bootstrap.properties配置文件,添加一行配置
2、當配置 文件添加上面那行配置之后,之前創建配置文件讀取不到了,需要按照新的規則創建配置文件
3、創建新的配置文件內容
三、名稱空間切換環境
1、創建命名空間

默認只有public,新建了dev、test和prod命名空間

2、在不同名稱空間創建配置文件
兩種方式:
第一,切換到每個名稱空間,添加一個新的配置文件。缺點:每個環境都要重復配置類似的項目
第二,直接通過clone方式添加配置,並修改即可。推薦
我選擇克隆到dev,在dev配置列表就看見剛才克隆過來的配置文件。
為了區分,修改一下每個配置文件的端口號(配置列表->編輯)
3.在項目模塊中,修改bootstrap.properties添加如下配置
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev
# 該配置影響統一配置中心中的dataId,之前已經配置過
spring.application.name=service-statistics
#指定命名空間
spring.cloud.nacos.config.namespace=13b5c197-de5b-47e7-9903-ec0538c9db01
四、多配置文件加載
在一些情況下需要加載多個配置文件。假如現在dev名稱空間下有三個配置文件:service-statistics.properties、redis.properties、jdbc.properties
1、service-statistics配置文件的內容
# 服務端口 server.port=8008 # 服務名 spring.application.name=service-statistics # mysql數據庫連接 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/zxjy?serverTimezone=GMT%2B8&useSSL=false spring.datasource.username=root spring.datasource.password=123 #返回json的全局時間格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 #配置mapper xml文件的路徑 mybatis-plus.mapper-locations=classpath:com/stu/staservice/mapper/xml/*.xml #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # nacos服務地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2、修改一下service-statistics-dev.properties配置文件的端口號,把端口號單獨抽離出來,在配置列表,找到編輯,把服務端口去掉,然后發布。
3、新建port.properties配置文件,配置內容是服務端口
4、修改項目配置文件,加載Nacos多個配置文件
如果只有一個配置文件,就添加一個就可以,從0開始,多個依次添加
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev
# 該配置影響統一配置中心中的dataId
spring.application.name=service-statistics
#命名空間
spring.cloud.nacos.config.namespace=dd209508-d54b-4625-897e-506c1092e43e
# 開啟動態刷新配置,否則配置文件修改,工程無法感知 spring.cloud.nacos.config.ext-config[0].data-id=port.properties spring.cloud.nacos.config.ext-config[0].refresh=true
5、在idea啟動項目,看Tomcat端口號是否是剛才配置的8333
