- 一、SpringCloud Nacos 概述
- 二、SpringCloud Nacos 下载安装启动
- 三、SpringCloud Nacos 作为服务注册发现中心
- 四、SpringCloud Nacos 作为Config配置中心
- 五、SpringCloud Nacos Config配置中心动态更新
- 六、项目实现配置文件动态刷新,bootstrap.properties增加配置
- 七、SpringCloud Nacos Config配置DataId配置规则
- 八、完全关闭 Nacos Config 的自动化配置
- 九、Nacos Config Starter 更多的配置项信息
- 十、Nacos服务端开启鉴权
- 十一、Nacos Config 对外暴露的 Endpoint
一、SpringCloud Nacos 概述
Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。
官方地址:
https://nacos.io/zh-cn/index.html
官方文档:
https://nacos.io/zh-cn/docs/what-is-nacos.html
Spring官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html
二、SpringCloud Nacos 下载安装启动
见:
https://www.cnblogs.com/fanshuyao/p/14577910.html
三、SpringCloud Nacos 作为服务注册发现中心
见:
https://www.cnblogs.com/fanshuyao/p/14577910.html
官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery
四、SpringCloud Nacos 作为Config配置中心
官方中文文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html#_spring_cloud_alibaba_nacos_config
英文文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_config
Nacos1.4.1报错: longPolling error ,java.util.concurrent.RejectedExecutionException 解决方案:
https://www.cnblogs.com/fanshuyao/p/14572830.html
SpringCloud Nacos 作为Config配置中心步骤:
1、pom.xml文件引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!-- Hoxton.SR10 --><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><!-- 当Nacos的版本为:1.4.1,必须使用2.2.5.RELEASE版本,不然Nacos配置在第一次更新后会报错,后面再也更新不了,因为版本不一致导致的 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
2、添加bootstrap.properties配置文件
bootstrap文件优先级高于application.properties
注意(都是官方文档说的):
(1)必须使用 bootstrap.properties配置文件来配置 Nacos Server 地址
(2)${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties 文件中。
具体内容是:
#必须使用 bootstrap.properties配置文件来配置 Nacos Server 地址#${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties 文件中。#bootstrap.properties,bootstrap文件优先级高于application.properties#spring.devtools.restart.enabled=falsespring.profiles.active=devserver.port=8805spring.application.name=SPRING-CLOUD-NACOS-CONSUMER#配置nacos服务地址,通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:#单机配置:127.0.0.1:8848#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#服务提供者的服务名,接口调用需要用到my.nacos.service.name=SPRING-CLOUD-NACOS-SERVICE#配置中心,相关配置#配置文件的后缀,默认值是:properties,可以配置成:yamlspring.cloud.nacos.config.file-extension=properties#配置文件更新的服务地址#单机配置:127.0.0.1:8848#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848spring.cloud.nacos.config.server-addr=127.0.0.1:8848#完全关闭 Nacos Config 的自动化配置#spring.cloud.nacos.config.enabled=false#DataId 默认使用 `spring.application.name` 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 nacos-config.properties, GROUP 为 DEFAULT_GROUP#DataId匹配模式#Nacos DataId的格式:#${spring.profiles.active}为空时:${spring.application.name}.${file-extension:properties}#${spring.profiles.active}不为空时:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties#若spring.application.name=myconfig,且无spring.profiles.active配置,则Nacos服务配置的DataId就是:myconfig.properties#指定特定的DataId配置文件#从默认的组DEFAULT_GROUP取配置名为aaa.properties进行更新#如果设置了组:spring.cloud.nacos.config.group,则在Nacos服务配置时,Group属性就必须一致#spring.cloud.nacos.config.name=aaa.properties#Group匹配模式:#当使用spring.cloud.nacos.config.group,在Nacos服务配置时,Group属性就必须一致,而DataId还是原来的匹配规则,只是定义了一个组,只能从该组取,默认的组是DEFAULT_GROUP,没有配置组,就是从默认组取spring.cloud.nacos.config.group=mygroup#命名空间(namespace)模式#Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。#在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。#在命名空间管理,新增自定义命名空间:dev,命名空间ID不用填写,自动生成,保存后把命名空间ID复制,赋值给spring.cloud.nacos.config.namespace#匹配方式是:#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空间的名称就是dev,和spring.profiles.active配置一致#spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7#配置的优先级#Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置#A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置#B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置#C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置#服务端如何开启鉴权#当服务端开启鉴权:nacos.core.auth.enabled=true后,客户端访问需要账号和密码,当前的配置,服务注册中心和配置中心都可以正常访问#服务注册中心、服务配置中心的同时配置的账号和密码#spring.cloud.nacos.username=nacos#spring.cloud.nacos.password=nacos#服务注册中心配置的账号和密码:#spring.cloud.nacos.discovery.username=nacos#spring.cloud.nacos.discovery.password=nacos#服务配置中心的账号和密码:#spring.cloud.nacos.config.username=nacos#spring.cloud.nacos.config.password=nacos#配置如下:#spring.cloud.nacos.username=nacos#spring.cloud.nacos.password=nacos#测试配置的值config.text=1
3、application.properties配置文件修改
测试bootstrap文件优先级高于application.properties,application.properties配置的属性,会覆盖bootstrap.properties的属性,因为bootstrap.properties先加载。
#测试配置的值config.text=application.properties-1
4、启动类
加上@EnableDiscoveryClient注解
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:**/@SpringBootApplication@EnableDiscoveryClientpublic class SpringCloud8805NacosWebApplication {public static void main(String[] args) {SpringApplication.run(SpringCloud8805NacosWebApplication.class, args);}}
5、Controller请求类
加上@RefreshScope,实现Nacos配置文件的动态刷新,不加不会刷新。
@RefreshScope不能配置在启动类上,无效果。
@RefreshScope作用域是:ElementType.TYPE, ElementType.METHOD
实现配置文件:config.text=xxx的动态更新
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import com.lqy.springCloud.Result;//@RefreshScope:实现Nacos配置文件的动态刷新,不能配置在启动类上,无效果,作用域是:ElementType.TYPE, ElementType.METHOD@RefreshScope@RestController@RequestMapping("/web")public class WebController {@Value("${config.text}")private String configText;@RequestMapping(value="/config", produces = MediaType.APPLICATION_JSON_VALUE)public Result config() {return Result.ok(configText);}}
五、SpringCloud Nacos Config配置中心动态更新
1、启动Nacos Server
在bin路径(D:\0soft\nacos-server-1.4.1\nacos\bin)打开cmd命令窗口,输入下面的命令启动:
startup.cmd -m standalone
2、浏览器打开Nacos Server控制台
http://127.0.0.1:8848/nacos
登录名:nacos
密码:nacos
3、配置管理
展开【配置管理】,点击【配置列表】,在最右边有一个加号的添加按钮,添加相应的配置


六、项目实现配置文件动态刷新,bootstrap.properties增加配置
#配置文件的后缀,默认值是:properties,可以配置成:yamlspring.cloud.nacos.config.file-extension=properties#配置文件更新的服务地址#单机配置:127.0.0.1:8848#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848spring.cloud.nacos.config.server-addr=127.0.0.1:8848
七、SpringCloud Nacos Config配置DataId配置规则
DataId 默认使用 spring.application.name 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 nacos-config.properties, GROUP 为 DEFAULT_GROUP
1、支持DataId匹配模式的配置
Nacos DataId的格式:
${spring.profiles.active}为空时:${spring.application.name}.${file-extension:properties}${spring.profiles.active}不为空时:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
具体示例:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties
若spring.application.name=myconfig,且无spring.profiles.active配置,则Nacos服务配置的DataId就是:myconfig.properties
指定特定的DataId配置文件
从默认的组DEFAULT_GROUP取配置名为aaa.properties进行更新
如果设置了组:spring.cloud.nacos.config.group,则在Nacos服务配置时,Group属性就必须一致
spring.cloud.nacos.config.name=aaa.properties
2、支持自定义 Group 的配置
当使用spring.cloud.nacos.config.group,在Nacos服务配置时,Group属性就必须一致,而DataId还是原来的匹配规则,只是定义了一个组,只能从该组取,默认的组是DEFAULT_GROUP,没有自定义组,就是从默认组取
spring.cloud.nacos.config.group=mygroup
3、支持自定义 namespace 的配置
Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。
在命名空间管理,新增自定义命名空间:dev,命名空间ID不用填写,自动生成,保存后把命名空间ID复制,赋值给spring.cloud.nacos.config.namespace
匹配方式是:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空间的名称就是dev,和spring.profiles.active配置一致
spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7
4、支持自定义扩展的 Data Id 配置
Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:
spring.application.name=opensource-service-providerspring.cloud.nacos.config.server-addr=127.0.0.1:8848# config external configuration# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties# 2、Data Id 不在默认的组,不支持动态刷新spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.propertiesspring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP# 3、Data Id 既不在默认的组,也支持动态刷新spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.propertiesspring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUPspring.cloud.nacos.config.ext-config[2].refresh=true
可以看到:
通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
注意:
多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。
此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
5、配置的优先级
Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置
A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
八、完全关闭 Nacos Config 的自动化配置
通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config
spring.cloud.nacos.config.enabled=false
九、Nacos Config Starter 更多的配置项信息
spring.cloud.nacos.config.server-addr服务端地址Nacos Server 启动监听的ip地址和端口spring.cloud.nacos.config.name配置对应的 DataId先取 prefix,再去 name,最后取 spring.application.namespring.cloud.nacos.config.prefix配置对应的 DataId先取 prefix,再去 name,最后取 spring.application.namespring.cloud.nacos.config.encode配置内容编码读取的配置内容对应的编码spring.cloud.nacos.config.groupGROUP默认是:DEFAULT_GROUP,配置对应的组spring.cloud.nacos.config.fileExtension文件扩展名默认是:properties,配置项对应的文件扩展名,目前支持 properties 和 yaml(yml)spring.cloud.nacos.config.timeout获取配置超时时间默认是:3000,客户端获取配置的超时时间(毫秒)spring.cloud.nacos.config.endpoint接入点地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址spring.cloud.nacos.config.namespace命名空间常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等spring.cloud.nacos.config.accessKeyAccessKey,当要上阿里云时,阿里云上面的一个云账号名spring.cloud.nacos.config.secretKeySecretKey,当要上阿里云时,阿里云上面的一个云账号密码spring.cloud.nacos.config.contextPathNacos Server 对应的 context path,Nacos Server 对外暴露的 context pathspring.cloud.nacos.config.clusterName集群,配置成Nacos集群名称spring.cloud.nacos.config.sharedDataids共享配置,共享配置的 DataId, "," 分割spring.cloud.nacos.config.refreshableDataids共享配置动态刷新,共享配置中需要动态刷新的 DataId, "," 分割spring.cloud.nacos.config.extConfig自定义 Data Id 配置,属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh
十、Nacos服务端开启鉴权
当服务端开启鉴权:nacos.core.auth.enabled=true后,客户端访问需要账号和密码,当前的配置,服务注册中心和配置中心都可以正常访问
服务注册中心、服务配置中心的同时配置的账号和密码(已经验证)
spring.cloud.nacos.username=nacosspring.cloud.nacos.password=nacos
仅服务注册中心配置的账号和密码(未验证):
#spring.cloud.nacos.discovery.username=nacos#spring.cloud.nacos.discovery.password=nacos
仅服务配置中心的账号和密码(未验证):
#spring.cloud.nacos.config.username=nacos#spring.cloud.nacos.config.password=nacos
十一、Nacos Config 对外暴露的 Endpoint
Nacos Config 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-config。
Endpoint 暴露的 json 中包含了三种属性:
Sources: 当前应用配置的数据信息
RefreshHistory: 配置刷新的历史记录
NacosConfigProperties: 当前应用 Nacos 的基础配置信息
