原文链接: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作为
业务框架的分布式配置中心。

接下来开始进行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

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)

我们通过@NacosValue 注解设置属性值,name:hello 表示key为name的配置项的默认值为
hello,autoRefreshed=true表示开启自动刷新。

我们通过死循环来测试自动刷新是否生效。

控制台配置配置项

首先进入Nacos配置页面,输入账号密码,进行登录,如图

登录Naocs控制台

登录成功后在左侧菜单一次展开

配置管理|-配置列表

配置列表

点击 “+” 增加配置项。必填项为: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实现了配置的读取及刷新的功能,从应用的角度出发,应当足够日常开发使用了,更多的
使用技巧和实现细节,我们有机会再讲。

转载于:https://www.cnblogs.com/fswhq/p/11273157.html

springboot整合nacos配置实现实时更新相关推荐

  1. Springboot整合Nacos配置中心

    前提 安装了Nacos服务端并登陆到其控制台页面. 创建一个Springboot工程. Nacos配置:(相关概念后面说明): 创建一个命名空间,当然,也有默认的命名空间. 创建配置文件: 整合 第一 ...

  2. SpringBoot整合nacos实现参数配置

    SpringBoot整合nacos实现参数配置 1.nacos安装 2.项目配置 配置文件 3.nacos配置 4.启动 1.nacos安装 首先,这里的版本号用的是linux的1.4.1 链接:ht ...

  3. 整合nacos配置中心启动报c.a.c.n.c.NacosPropertySourceBuilder: 101 - get data from Nacos error,dataId:xxx.yml

    场景: SpringBoot项目整合nacos配置中心,开启nacos-server端的权限控制后,项目启动报如下错误: c.a.c.n.c.NacosPropertySourceBuilder: 1 ...

  4. Springboot整合redis配置详解

    Springboot整合redis配置详解 1.导入依赖 <dependency><groupId>org.springframework.boot</groupId&g ...

  5. springboot 读取nacos配置的流程和数据变化实时更新机制

    一.NACOS配置如下 1.bootStrap.yaml 配置 spring:profiles:active: devapplication:name: newdaycloud:nacos:disco ...

  6. SpringBoot整合Apollo配置中心快速使用

    一.简介 1.Apollo 是什么?Apollo(阿波罗)是携程框架部门研发的分布式配置中心.服务端基于Spring Boot和Spring Cloud开发. 2.为什么要使用Apollo? 安全性: ...

  7. springboot 整合 swagger2 配置账号密码登录 demo代码

    配置spring security登录可参考: springboot整合spring security安全框架-简单验证账号密码 一.pom文件引入swagger依赖 <!-- swagger2 ...

  8. spring-boot整合druid配置

    准备:druid是阿里巴巴开源的高性能,多功能的连接池,其主要配置参数如下: 配置 缺省值 说明 name   配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来.如果没有配 ...

  9. Shiro与Springboot整合:配置依赖改造登录方法

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

最新文章

  1. Android 自定义组件随着手指自动画圆
  2. Leetcode题库 6.Z字形变换(C实现)
  3. JaveScript用二分法与普通遍历(冒泡)
  4. 用VB编写的一个可在屏幕上移动的十字架
  5. 2015-05-16
  6. 系统分析与设计方法---需求分析与软件设计
  7. html怎么修改网页背景色,CSS如何设置网页背景颜色、背景图片
  8. windows服务器硬盘怎么扩容,windows2016 扩容硬盘
  9. 新闻人物言论自动提取
  10. 计算机中丢失ucore46.dll,Creo6.0 Purge功能 如果试过各种方法还不能使用,可以试下这个方法...
  11. Excel基础(01)认识excel
  12. EDM邮件营销的七个基本原则
  13. QEMU 网络配置一把梭
  14. inet_aton mysql_MySQL_IP处理函数inet_aton()和inet_ntoa()使用说明,MYSql的IP对int的转换函数 select i - phpStudy...
  15. PWM输入捕获(只使用一路定时器通道)
  16. w7系统显示rpc服务器不可用,教你win7系统rpc服务器不可用怎么办
  17. 解决Python中TCP数据转为json后中文变为Ascii码的问题
  18. 【vijos1543/luogu1936】极值问题/水晶灯火灵 - 数论
  19. 【方案阐述】如何实现私有云平台的统一管理与向上级联?
  20. 读书笔记之 sed 篇

热门文章

  1. 01-06 Linux常用命令-统计
  2. php size(),PHP filesize() 函数
  3. python 语音识别接口_python实现阿里云语音识别api
  4. 前端学成什么样就能找工作了?
  5. python中二维数组如何查找_【剑指offer】---二维数组中的查找(Python)
  6. django 给单个文件加log_django配置日志模块
  7. Office文档转pdf和图片之NodeJS
  8. android 百叶窗动画,android 幻灯片效果之百叶窗
  9. pytorch教程之nn.Module类详解——使用Module类来自定义网络层
  10. dcmtk 3.6.0 error C1083: Cannot open include file: 'iostream.h' 解决办法