經過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現配置的動態變動。html
經過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現服務的註冊與發現。git
注意:github
這裏我建立Data Id爲nacos-config.properties的配置文件,其中Group爲默認的DEFAULT_GROUP,配置文件的格式也相應的選擇Properties,配置內容中添加配置nacos.config=hello_nacos,如圖所示。spring
方式二:經過調用Nacos Open API向Nacos Server發佈配置:dataId爲nacos-config.properties,內容爲nacos.config=hello_nacosbootstrap
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config.properties&group=DEFAULT_GROUP&content=nacos.config=hello_nacos"
建立服務應用 api
(1)使用SpringBoot,建立一個名爲nacos-config的子工程。app
(2)pom.xml文件添加以下依賴。curl
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencyManagement> <dependencies> <!-- 聲明Spring cloud的版本爲Hoxton.SR3--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 聲明Spring cloud alibaba版本爲2.1.0.RELEASE --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 聲明nacos-discovery依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 聲明nacos-config依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies>
備註:若是不須要註冊該服務,也能夠去掉nacos-discovery依賴。spring-boot
注意:版本2.1.x.RELEASE 對應的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 對應的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 對應的是 Spring Boot 1.5.x 版本。測試
更多版本對應關係參考:版本說明 Wiki
(3)修改application.properties添加相關配置
server.port=9002
spring.application.name=nacos-config
spring.application.cloud.nacos.discovery.server-addr=127.0.0.1:8848
(4)建立配置文件,文件名爲bootstrap.properties。並在bootstrap.properties中配置Nacos server的地址和應用名。
注意:文件名是bootstrap.xxx,而不是application或者其餘。由於Nacos同Spring Cloud Config同樣,在項目初始化時,要保證先從配置中心進行配置拉取,拉取配置以後,才能保證項目的正常啓動。SpringBoot中配置文件的加載是存在優先級順序的,bootstrap優先級高於application。
這裏的配置文件類型能夠根據我的習慣選擇,我這裏用的時properties類型,配置內容以下:
#服務名稱
spring.application.name=nacos-config
#指定註冊中心的地址。若是你不須要註冊該服務,也能夠去掉該項,並刪除discovery依賴。
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#指定配置中心的地址。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#指定配置中心中配置文件的格式。
#spring.cloud.nacos.config.file-extension=properties
之因此須要配置spring.application.name,是由於它是構成Nacos配置管理dataId字段的一部分。
${prefix}-${spring.profile.active}.${file-extension}
prefix:默認爲spring.application.name的值,也能夠經過配置項spring.cloud.nacos.config.prefix來配置。
spring.profile.active:即爲當前環境對應的profile,詳情能夠參考 Spring Boot文檔。能夠經過配置項spring.profile.active來配置。當spring.profile.active爲空時,對應的鏈接符 - 也將不存在,dataId的拼接格式變成 ${prefix}.${file-extension}。
file-exetension:爲配置內容的數據格式,能夠經過配置項spring.cloud.nacos.config.file-extension來配置。目前只支持properties和yaml類型。
(5)建立對外接口ConfigController,從nacos中讀取配置。
@RefreshScope @RestController public class ConfigController { @Value("${nacos.config}") private String configValue; @RequestMapping("/config/get") public String get() { return configValue; } }
@RefreshScope:Spring Cloud的原生註解,可使當前類下的配置支持動態更新。
@Value:經過@Value註解,去讀取key爲nacos.config的配置的值,並經過/config/get接口返回。
到此代碼部分的工做已經完成。
啓動服務進行測試
(1)保證Nacos-Server已經啓動。
(2)檢查Nacos-Server中配置列表中是否已經添加相應的配置文件。
(3)啓動nacos-config項目。
(4)啓動成功後在Nacos控制檯中能夠看到咱們註冊的服務。
(5)此時調用接口進行測試http://127.0.0.1:9002/config/get,能夠看到返回結果。
此時說明已經成功讀取到配置。
(6)下面我將Nacos-Server上的配置修改成hello_lars,看看可否動態更新。修改Nacos-Server上的配置後,刷新http://127.0.0.1:9002/config/get頁面,結果更新爲新的配置了。
能夠看到我經過Nacos-server的控制檯進行配置的修改,客戶端服務nacos-config也相應的進行熱更新。