赞
踩
2.springcloudAlibaba-openFeign
3.springcloudAlibaba-负载均衡器Ribbon
4.springcloudAlibaba-nacos配置中心
5.springcloudAlibaba-Seata 分布式事务
7.springcloudAlibaba-网关gateway
目录
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使
用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
新建module nacosConfig
pom 引入
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
注意!! 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 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。