原文鏈接: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/
本文我將帶領大家在springboot2.x的開發框架中整合alibaba-nacos,實現配置獲取及刷新等功能。
引用官方介紹:
Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。
Nacos 是構建以“服務”為中心的現代應用架構(例如微服務范式、云原生范式)的服務基礎設施。
可以看到,Nacos主要面向分布式配置級服務發現等領域,由于之前使用過阿里云的ACM配置服務體驗良好,而Nacos便是ACM的開源版本,因此我們選擇了Nacos作為
業務框架的分布式配置中心。
基于springboot的項目、接下來開始進行Nacos的整合。
開始之前,要保證已經搭建好Nacos平臺。
如何安裝Nacos的Server請移步?安裝Nacos
引入nacos-config-spring-boot-starter
在pom.xml中添加如下依賴
<!--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版本需要引入下面的依賴
<!--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的config-server地址
在application.properties中添加如下配置
##########################################################################
#
# Nacos配置
#
##########################################################################
nacos.config.server-addr=172.30.xx.xx:8848,172.30.xx.xx:8848,172.30.xx.xx:8848
我這里使用的nacos服務端是集群模式,地址做了脫敏處理。
編寫配置讀取類NacosConfigAnnoatationService
docker 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;@Overridepublic 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)
spring boot常用注解、我們通過@NacosValue 注解設置屬性值,name:hello 表示key為name的配置項的默認值為
hello,autoRefreshed=true表示開啟自動刷新。
我們通過死循環來測試自動刷新是否生效。
控制臺配置配置項
首先進入Nacos配置頁面,輸入賬號密碼,進行登錄,如圖
登錄成功后在左側菜單一次展開
配置管理|-配置列表
springboot版本,點擊 “+” 增加配置項。必填項為: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
保持項目運行,我們進入管理控制臺,在配置列表我們的那一項,點擊?編輯
springboot的優點。修改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實現了配置的讀取及刷新的功能,從應用的角度出發,應當足夠日常開發使用了,更多的
使用技巧和實現細節,我們有機會再講。