
通過本教程的前兩篇:
我們已經學會了,如何利用Nacos實現服務的註冊與發現。同時,也介紹了在Spring Cloud中,我們可以使用的幾種不同編碼風格的服務消費方式。接下來,我們再來學習一下Nacos的另外一個重要能力:配置管理。
簡介Nacos除了實現了服務的註冊發現之外,還將配置中心功能整合在了一起。通過Nacos的配置管理功能,我們可以將整個架構體系內的所有配置都集中在Nacos中存儲。這樣做的好處,在以往的教程中介紹Spring Cloud Config時也有提到,主要有以下幾點:
Nacos的配置管理模型與淘寶開源的配置中心Diamond類似,基礎層面都通過DataId和Group來定位配置內容,除此之外還增加了很多其他的管理功能。
快速入門下面我們通過一個簡單的例子來介紹如何在Nacos中創建配置內容以及如何在Spring Cloud應用中加載Nacos的配置信息。
創建配置第一步:進入Nacos的控制頁面,在配置列表功能頁面中,點擊右上角的「+」按鈕,進入「新建配置」頁面,如下圖填寫內容:

其中:
第一步:創建一個Spring Boot應用,可以命名為:alibaba-nacos-config-client。
第二步:編輯pom.xml,加入必要的依賴配置,比如:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/><!--lookupparentfromrepository--></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version><optional>true</optional></dependency></dependencies>上述內容主要三部分:
可以看到,這個例子中並沒有加入nacos的服務發現模塊,所以這兩個內容是完全可以獨立使用的
第三步:創建應用主類,並實現一個HTTP接口:
@SpringBootApplicationpublicclassTestApplication{publicstaticvoidmain(String[]args){SpringApplication.run(TestApplication.class,args);}@Slf4j@RestController@RefreshScopestaticclassTestController{@Value("${didispace.title:}")privateStringtitle;@GetMapping("/test")publicStringhello(){returntitle;}}}內容非常簡單,@SpringBootApplication定義是個Spring Boot應用;還定義了一個Controller,其中通過@Value註解,注入了key為didispace.title的配置(默認為空字符串),這個配置會通過/test接口返回,後續我們會通過這個接口來驗證Nacos中配置的加載。另外,這裡還有一個比較重要的註解@RefreshScope,主要用來讓這個類下的配置內容支持動態刷新,也就是當我們的應用啟動之後,修改了Nacos中的配置內容之後,這裡也會馬上生效。
第四步:創建配置文件bootstrap.properties,並配置服務名稱和Nacos地址
spring.application.name=alibaba-nacos-config-clientserver.port=8001spring.cloud.nacos.config.server-addr=127.0.0.1:8848注意:這裡必須使用bootstrap.properties。同時,spring.application.name值必須與上一階段Nacos中創建的配置Data Id匹配(除了.properties或者.yaml後綴)。
第五步:啟動上面創建的應用。
2019-01-2718:29:43.497INFO93597---[main]o.s.c.a.n.c.NacosPropertySourceBuilder:Loadingnacosdata,dataId:'alibaba-nacos-config-client.properties',group:'DEFAULT_GROUP'2019-01-2718:29:43.498INFO93597---[main]b.c.PropertySourceBootstrapConfiguration:Locatedpropertysource:CompositePropertySource{name='NACOS',propertySources=[NacosPropertySource{name='alibaba-nacos-config-client.properties'}]}在啟動的時候,我們可以看到類似上面的日誌信息,這裡會輸出應用程序要從Nacos中獲取配置的dataId和group。如果在啟動之後,發現配置信息沒有獲取到的時候,可以先從這裡着手,看看配置加載的目標是否正確。
第六步:驗證配置獲取和驗證動態刷新
用curl或者postman等工具,訪問接口: localhost:8001/test,一切正常的話,將返回Nacos中配置的spring-cloud-alibaba-learning。然後,再通過Nacos頁面,修改這個內容,點擊發布之後,再訪問接口,可以看到返回結果變了。
同時,在應用的客戶端,我們還能看到如下日誌:
2019-01-2718:39:14.162INFO93597---[-127.0.0.1_8848]o.s.c.e.event.RefreshEventListener:Refreshkeyschanged:[didispace.title]在Nacos中修改了Key,在用到這個配置的應用中,也自動刷新了這個配置信息。
代碼示例本文示例讀者可以通過查看下面倉庫的中的alibaba-nacos-config-client項目:
如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!
END
關注後端面試那些事,回復【2022面經】
獲取最新大廠Java面經

