經過本教程的前兩篇:html
咱們已經學會了,如何利用Nacos實現服務的註冊與發現。同時,也介紹了在Spring Cloud中,咱們可使用的幾種不一樣編碼風格的服務消費方式。接下來,咱們再來一塊兒學習一下Nacos的另一個重要能力:配置管理。java
Nacos除了實現了服務的註冊發現以外,還將配置中心功能整合在了一塊兒。經過Nacos的配置管理功能,咱們能夠將整個架構體系內的全部配置都集中在Nacos中存儲。這樣作的好處,在以往的教程中介紹Spring Cloud Config時也有提到,主要有如下幾點:git
Nacos的配置管理模型與淘寶開源的配置中心Diamond相似,基礎層面都經過DataId
和Group
來定位配置內容,除此以外還增長了不少其餘的管理功能。github
下面咱們經過一個簡單的例子來介紹如何在Nacos中建立配置內容以及如何在Spring Cloud應用中加載Nacos的配置信息。web
第一步:進入Nacos的控制頁面,在配置列表功能頁面中,點擊右上角的「+」按鈕,進入「新建配置」頁面,以下圖填寫內容:spring
其中:bootstrap
Data ID
:填入alibaba-nacos-config-client.properties
Group
:不修改,使用默認值DEFAULT_GROUP
配置格式
:選擇Properties
配置內容
:應用要加載的配置內容,這裏僅做爲示例,作簡單配置,好比:didispace.title=spring-cloud-alibaba-learning
第一步:建立一個Spring Boot應用,能夠命名爲:alibaba-nacos-config-client
。安全
第二步:編輯pom.xml
,加入必要的依賴配置,好比:bash
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </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.1.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>
上述內容主要三部分:架構
parent
:定義spring boot的版本dependencyManagement
:spring cloud的版本以及spring cloud alibaba的版本,因爲spring cloud alibaba還未歸入spring cloud的主版本管理中,因此須要本身加入dependencies
:當前應用要使用的依賴內容。這裏主要新加入了Nacos的配置客戶端模塊:spring-cloud-starter-alibaba-nacos-config
。因爲在dependencyManagement
中已經引入了版本,因此這裏就不用指定具體版本了。能夠看到,這個例子中並無加入nacos的服務發現模塊,因此這兩個內容是徹底能夠獨立使用的
第三步:建立應用主類,並實現一個HTTP接口:
@SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Slf4j @RestController @RefreshScope static class TestController { @Value("${didispace.title:}") private String title; @GetMapping("/test") public String hello() { return title; } } }
內容很是簡單,@SpringBootApplication
定義是個Spring Boot應用;還定義了一個Controller,其中經過@Value
註解,注入了key爲didispace.title
的配置(默認爲空字符串),這個配置會經過/test
接口返回,後續咱們會經過這個接口來驗證Nacos中配置的加載。另外,這裏還有一個比較重要的註解@RefreshScope
,主要用來讓這個類下的配置內容支持動態刷新,也就是當咱們的應用啓動以後,修改了Nacos中的配置內容以後,這裏也會立刻生效。
第四步:建立配置文件bootstrap.properties
,並配置服務名稱和Nacos地址
spring.application.name=alibaba-nacos-config-client server.port=8001 spring.cloud.nacos.config.server-addr=127.0.0.1:8848
注意:這裏必須使用
bootstrap.properties
。同時,spring.application.name
值必須與上一階段Nacos中建立的配置Data Id匹配(除了.properties或者.yaml後綴)。
第五步:啓動上面建立的應用。
2019-01-27 18:29:43.497 INFO 93597 --- [ main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP' 2019-01-27 18:29:43.498 INFO 93597 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: 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-27 18:39:14.162 INFO 93597 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [didispace.title]
在Nacos中修改了Key,在用到這個配置的應用中,也自動刷新了這個配置信息。
本文示例讀者能夠經過查看下面倉庫的中的alibaba-nacos-config-client
項目:
若是您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!