这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战
基本概念
- 通过Nacos Server和spring-cloud-starter-alibaba-nacos-config实现配置的动态变更
- 通过Nacos Server和spring-cloud-starter-alibaba-nacos-discovery实现服务的注册与发现
配置
Nacos config
- Nacos提供用于存储配置和其余元数据的key-value存储,为分布式系统中的外部化配置提供服务器端和客户端支持
- 使用Spring Cloud Alibaba Nacos Config, 可以在Nacos Server集中管理你Spring Cloud应用的外部属性配置
- 初始化Nacos:
- 启动Nacos, 然后在Nacos添加配置:
1 | nacos复制代码Data ID:nacos-config.properties |
- 其中dataid是以默认的文件扩展名方式properties为扩展名
- 配置:
+ 引入**nacos config**依赖
1 | xml复制代码<dependency> |
- 使用bootstrap.properties配置文件来配置Nacos Server地址:
1 | properties复制代码spring.application.name=nacos-config |
- 如果使用域名的方式来访问nacos时 ,spring.cloud.nacos.config.server-addr配置的方式为 [域名:port]
- 比如nacos的域名为abc.com.nacos, 监听的端口为80. 则配置为spring.cloud.nacos.config.server-addr=abc.com.nacos:80. 端口号80不能省略
- 启动:
1 | java复制代码@SpringBootApplication |
- 输出:
1 | console复制代码user name :nacos-config-properties; age: 90 |
yaml文件配置
- spring-cloud-starter-alibaba-nacos-config支持yaml格式
- 在应用的bootstrap.properties配置文件中显示的声明dataid文件扩展名:
1 | properties复制代码spring.cloud.nacos.config.file-extension=yaml |
- 初始化Nacos,添加一个dataid为yaml扩展名的配置:
1 | nacos复制代码Data ID:nacos-config.yaml |
- 启动:
1 | java复制代码@SpringBootApplication |
- 输出:
1 | console复制代码user name :nacos-config-yaml; age: 68 |
配置动态更新
- spring-cloud-starter-alibaba-nacos-config支持配置的动态更新
1 | java复制代码@SpringBootApplication |
- 可以在配置文件中关闭动态更新:
1 | properties复制代码spring.cloud.nacos.config.refresh.enabled=false |
配置profiles粒度
- spring-cloud-starter-alibaba-nacos-config加载配置时:
- 不仅仅加载以dataid为 [spring.application.name].[file-extension:properties] 为前缀的基础配置
- 还加载dataid为 [spring.application.name]-[profile].[file-extension:properties] 的基础配置
- 多环境下的不同配置,可以通过Spring提供的spring.profiles.active这个配置项来配置:
1 | properties复制代码# spring.profiles.active当通过配置文件来指定时必须放在bootstrap.properties文件中 |
- 初始化Nacos配置:
1 | nacos复制代码Data ID:nacos-config-develop.yaml |
- 启动:
1 | java复制代码@SpringBootApplication |
- 输出:
1 | console复制代码in develop-env enviroment; user name :nacos-config-yaml-update; age: 68 |
- 如果需要切换到生产环境,只需要更改spring.profiles.active参数配置:
1 | properties复制代码spring.profiles.active=product |
- 在项目实践中这个变量的值是需要不同环境而有不同的值,通常的做法是通过-Dspring.profiles.active=< profile >参数指定其配置来达到环境间灵活的切换
配置自定义namespace
- Nacos中的namespace:
- namespace用于进行租户粒度的配置隔离
- 不同的命名空间下,可以存在相同的Group或Data ID的配置
- namespace常常用于不同环境的配置的区分隔离
- 在没有明确指定spring.cloud.nacos.config.namespace配置时,默认使用的是Nacos上Public这个namespae. 可以通过配置自定义的命名空间:
1 | properties复制代码spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7 |
- 该配置必须放在bootstrap.properties文件中,此外spring.cloud.nacos.config.namespace的值是namespace对应的id,id值可以在Nacos的控制台获取.并且在添加配置时注意不要选择其余的namespace, 否则将会导致读取不到正确的配置
配置自定义Group
- 在没有明确指定spring.cloud.nacos.config.group配置的情况下,默认使用的是DEFAULT_GROUP. 可以通过配置自定义Group:
1 | properties复制代码spring.cloud.nacos.config.group=DEVELOP_GROUP |
- 该配置必须放在bootstrap.properties文件中,并且在添加配置时Group的值一定要和 spring.cloud.nacos.config.group的配置值一致
配置自定义Data Id
- Spring Cloud Alibaba Nacos Config支持自定义Data Id的配置,示例如下:
1 | properties复制代码spring.application.name=opensource-service-provider |
- spring.cloud.nacos.config.extension-configs[n].data-id配置支持多个Data Id的配置
- spring.cloud.nacos.config.extension-configs[n].group配置自定义Data Id所在的组,不明确配置的话,默认是DEFAULT_GROUP
本文转载自: 掘金