1.springcloudAlibaba-nacos
2.springcloudAlibaba-openFeign
3.springcloudAlibaba-负载均衡器Ribbon
4.springcloudAlibaba-nacos配置中心
5.springcloudAlibaba-Seata 分布式事务
6.springcloudAlibaba-sentinel
7.springcloudAlibaba-网关gateway
目录
介绍
基本操作
config其他配置
关闭动态刷新
支持profile粒度的配置
支持自定义 namespace 的配置
自定义 Group 的配置
自定义扩展的 Data Id 配置
@RefreshScope
配置的优先级
其他配置
spring-cloud-alibaba/nacos-config.adoc at 4f6e56dafd60305dfe8f143015d9d39bc6a7fc49 · alibaba/spring-cloud-alibaba · GitHub
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使
用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
新建module nacosConfig
pom 引入
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-web
注意!! resources 下创建 bootstrap.yml
server: port: 9995 spring: application: name: nacosConfig-service cloud: nacos: server-addr: 49.232.193.91:8848 username: nacos password: nacos
spring cloud通过创建bootstrap上下文来运转,它是ApplicationContext的父上下文。它负责从外部源加载配置属性,并负责解密本地外部配置文件中的属性。默认情况下bootstrap.yml具有较高的优先级,这个地方有个坑,稍后说
创建application启动类
在启动类中写一个获取applicationContent 内的name
public class nacosConfigApplication { public static void main(String[] args) throws InterruptedException { ConfigurableApplicationContext applicationContext = SpringApplication.run(nacosConfigApplication.class); while(true) { //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置 String userName = applicationContext.getEnvironment().getProperty("user.name"); String userAge = applicationContext.getEnvironment().getProperty("user.age"); System.err.println("user name :" + userName + "; age: " + userAge); TimeUnit.SECONDS.sleep(1); } } }
启动项目
可以看到nacos 中配置的信息打印了出来
我们可以修改 nacos中刚才配置的name 看是否支持实时变更
也没有问题
这里说一个问题,其实bootstrap.yml跟application.yml可以共存,bootstrap的优先级高于application这是没有问题的, 但是很多人说bootstrap 不会被application覆盖!!!这里多次测试 bootstrap都被application覆盖,大家有兴趣可以试一下,开发的时候尽量用bootstrap吧,或者两者不要有重复名的地方。有大佬知道真理的麻烦帮忙解释一下
我们继续
可以使用其他的文件类型nacos客户端默认是properties 的文件扩展名,用非properties格式 必须指定文件类型
你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新
Nacos Config 在加载配置的时候,不仅仅加载了以 DataId 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了DataId为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。
bootstrap.yml中增加 profile 配置
server: port: 9995 spring: profiles: active: dev #选择环境 application: name: nacosConfig-service cloud: nacos: server-addr: 49.232.193.91:8848 username: nacos password: nacos config: file-extension: yaml #nacos客户端默认是properties 的文件扩展名,用非properties格式 必须配置
新增nacos 配置文件
再增加一个 pro
启动项目查看日志
可以看到 name 变了 age 还是 11888
配置文件优先级大的会覆盖优先级小的 ,并且形成互补
profile>默认配置文件
但是在实际开发中很少用上面通过家后缀dev的形式区分,更多的还是通过namespace来进行区分
namespace 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。
在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:
spring.cloud.nacos.config.group=DEVELOP_GROUP
该配置必须放在 bootstrap.properties 文件中。并且在添加配置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。
一般是在同一个环境中区分不同的项目使用 dataId 是可以一样的
# 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.properties spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP # 3、Data Id 既不在默认的组,也支持动态刷新 spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP spring.cloud.nacos.config.ext-config[2].refresh=true
其中 n 的值越大,优先级越高。
也可以通过shared-configs配置
这里data ID一定要有扩展名 否则不生效
server: port: 9995 spring: profiles: active: pro application: name: nacosConfig-service cloud: nacos: server-addr: 49.232.193.91:8848 username: nacos password: nacos config: file-extension: yaml #nacos客户端默认是properties 的文件扩展名,用非properties格式 必须配置 namespace: 550133a7-bd2d-4a87-9bac-8075c6048512 shared-configs: - data-id: shared-configs.yml # extension-configs[0]: # data-id: shared-configs.yml
两种实现方式 优先级 profile>默认配置文件>extension-configs(下标越大会覆盖前面小的)>shared-configs(下标越大会覆盖前面小的)
@Value注解可以获取到配置中心的值,但是无法动态感知修改后的值,需要利用@RefreshScope注解
Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置
当三种方式共同使用时,他们的一个优先级关系是: A < B < C
配置项 |
Key |
默认值 |
说明 |
服务端地址 |
spring.cloud.nacos.config.server-addr |
Nacos Server 启动监听的ip地址和端口 |
|
配置对应的 DataId |
spring.cloud.nacos.config.name |
先取 prefix,再取 name,最后取 spring.application.name |
|
配置对应的 DataId |
spring.cloud.nacos.config.prefix |
先取 prefix,再取 name,最后取 spring.application.name |
|
配置内容编码 |
spring.cloud.nacos.config.encode |
读取的配置内容对应的编码 |
|
GROUP |
spring.cloud.nacos.config.group |
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 |
常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等 |
|
AccessKey |
spring.cloud.nacos.config.accessKey |
当要上阿里云时,阿里云上面的一个云账号名 |
|
SecretKey |
spring.cloud.nacos.config.secretKey |
当要上阿里云时,阿里云上面的一个云账号密码 |
|
Nacos Server 对应的 context path |
spring.cloud.nacos.config.contextPath |
Nacos Server 对外暴露的 context path |
|
集群 |
spring.cloud.nacos.config.clusterName |
配置成Nacos集群名称 |
|
共享配置 |
spring.cloud.nacos.config.sharedDataids |
共享配置的 DataId, "," 分割 |
|
共享配置动态刷新 |
spring.cloud.nacos.config.refreshableDataids |
共享配置中需要动态刷新的 DataId, "," 分割 |
|
自定义 Data Id 配置 |
spring.cloud.nacos.config.extConfig |
属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh |