原文連接:http://wuwenliang.net/2019/02/22/springboot2-x%E6%95%B4%E5%90%88nacos%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%E7%8E%B0%E9%85%8D%E7%BD%AE%E8%8E%B7%E5%8F%96%E5%8F%8A%E5%88%B7%E6%96%B0/html
本文我將帶領你們在springboot2.x的開發框架中整合alibaba-nacos,實現配置獲取及刷新等功能。spring
引用官方介紹:springboot
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。
Nacos 是構建以「服務」爲中心的現代應用架構(例如微服務範式、雲原生範式)的服務基礎設施。架構
能夠看到,Nacos主要面向分佈式配置級服務發現等領域,因爲以前使用過阿里雲的ACM配置服務體驗良好,而Nacos即是ACM的開源版本,所以咱們選擇了Nacos做爲
業務框架的分佈式配置中心。app
接下來開始進行Nacos的整合。
開始以前,要保證已經搭建好Nacos平臺。框架
如何安裝Nacos的Server請移步 安裝Nacos分佈式
在pom.xml中添加以下依賴ide
<!--nacos-discovery-spring-boot-starter--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.1</version> </dependency>
因爲咱們的項目的基礎是springboot2.x,使用版本0.2.1便可。對於springboot1.x版本須要引入下面的依賴spring-boot
<!--nacos-discovery-spring-boot-starter--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.1.1</version> </dependency>
在application.properties中添加以下配置微服務
########################################################################## # # Nacos配置 # ########################################################################## nacos.config.server-addr=172.30.xx.xx:8848,172.30.xx.xx:8848,172.30.xx.xx:8848
我這裏使用的nacos服務端是集羣模式,地址作了脫敏處理。
Nacos的springboot客戶端,提供了簡潔易用的API,支持註解方式對配置進行讀取即刷新。
@Service @NacosPropertySource(dataId = "com.gaoyang.marketing.rocketmq.order", groupId="DEFAULT_GROUP", autoRefreshed = true) public class NacosConfigAnnoatationService implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(NacosConfigAnnoatationService.class); /** * ${name:hello}:key=name,默認值=hello */ @NacosValue(value = "${name:hello}", autoRefreshed = true) String name; @NacosValue(value = "${interest:world}", autoRefreshed = true) String interest; @Override public void run(String... args) throws Exception { while (true) { Thread.sleep(4000); LOGGER.info("[NacosConfigAnnoatationService]註解方式獲取到的配置項目,name={},interest={}", name, interest); } } }
接下來對代碼進行詳細的解釋。
咱們編寫了一個測試類,標記爲spring的一個Service, 同時標註
@NacosPropertySource(dataId = "com.gaoyang.marketing.rocketmq.order", groupId="DEFAULT_GROUP", autoRefreshed = true)
使用 @NacosPropertySource 加載 dataId 爲 com.gaoyang.marketing.rocketmq.order ,groupId若是不配置,則默認爲
DEFAULT_GROUP 的配置源,並開啓自動更新。
經過spring的 @Value 注入配置,這裏的兩個配置是我在後臺創建好的,如何創建配置在下一章節進行詳細的展開。
以name配置項爲例,添加註解
@NacosValue(value = "${name:hello}", autoRefreshed = true)
咱們經過@NacosValue 註解設置屬性值,name:hello 表示key爲name的配置項的默認值爲
hello,autoRefreshed=true表示開啓自動刷新。
咱們經過死循環來測試自動刷新是否生效。
首先進入Nacos配置頁面,輸入帳號密碼,進行登陸,如圖
登陸成功後在左側菜單一次展開
配置管理 |-配置列表
點擊 「+」 增長配置項。必填項爲:dataId,groupId,配置內容。如圖所示
填寫完成後提交便可。
咱們首先運行樣例,將項目啓動。springboot中,對於標註了 @CommandLineRunner 的類,會在項目啓動完後自動加載運行run()方法。
控制檯打印以下內容,四秒打印一次,我截取一部分以下
2019-02-22 11:54:51.209 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker,interest=coding 2019-02-22 11:54:55.209 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker,interest=coding 2019-02-22 11:54:59.210 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker,interest=coding
保持項目運行,咱們進入管理控制檯,在配置列表咱們的那一項,點擊 編輯
修改name對應的配置爲 snowalker23333 點擊發布如圖
Nacos後臺很貼心的爲咱們讓咱們對修改先後的配置項進行二次確認,點擊確認發佈後,查看控制檯日誌
2019-02-22 11:55:23.214 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker,interest=coding 2019-02-22 11:55:27.215 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker2333333,interest=code 2019-02-22 11:55:31.215 [main] INFO c.g.m.d.p.config.NacosConfigAnnoatationService [37] - [NacosConfigAnnoatationService]註解方式獲取到的配置項目,name=snowalker2333333,interest=code
能夠看到,在項目運行的過程當中,配置項熱更新了。
它內部是經過一個Listener監聽器在後臺監聽服務端的推送消息,達到對配置項的熱更新的,和配置文件比起來至關方便了。
本文主要從實戰的角度,帶領讀者在springboot2.x中整合了Nacos實現了配置的讀取及刷新的功能,從應用的角度出發,應當足夠平常開發使用了,更多的使用技巧和實現細節,咱們有機會再講。