SpringCloudAlibaba:nacos作为配置中心

x33g5p2x  于2021-10-26 转载在 Spring  
字(3.6k)|赞(0)|评价(0)|浏览(871)

一、配置中心简介

1.简介

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容

2. dataid

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

  1. ${prefix}-${spring.profile.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{file-extension}。

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

3. 创建dataid

  • 点击新建

  • 填写

  • 完成

二、代码

1.pom文件

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba.cloud</groupId>
  8. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-web</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-actuator</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-test</artifactId>
  21. <scope>test</scope>
  22. </dependency>
  23. </dependencies>

2.application.yml

  1. spring:
  2. profiles:
  3. active: dev

spring boot中配置文件优先加载顺序:bootstrap.yml > xxx.yml > xxx.properties

bootstrap.yml 由父Spring ApplicationContext加载。

bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的

pplication.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换

3.bootstrap.yml

  1. server:
  2. port: 9004
  3. spring:
  4. application:
  5. name: config
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 192.168.31.100:8848
  10. config:
  11. server-addr: 192.168.31.100:8848
  12. file-extension: yaml

例如:dataId为config-dev.yaml

这里的config为spring.application.name=config

这里dev为spring.profiles.active=dev

这里yaml为spring.cloud.config.file-extension=yaml

4.controller

另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。

  1. @RestController
  2. @RefreshScope
  3. public class ConfigController {
  4. @Value("${config.info}")
  5. private String info;
  6. @GetMapping("/config/info")
  7. public String info(){
  8. return info;
  9. }
  10. }

5.启动类

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class NacosConfigApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(NacosConfigApplication.class, args);
  6. }
  7. }

6.测试

三、配置中心分类管理

默认情况

Namespace= public, Group= DEFAULT_GROUP,默认Cluster是DEFAULT
1.
Namespace主要实现隔离

比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个 Namespace,不同的 Namespace之间是隔离的
1.
Group

Group可以把不同的微服服务划分到同一个分组里面
1.
Service

Service就是微服务;个 Servicer可以包含多个 Cluster(集群), Nacos默认 Cluster是 DEFAULT, Cluster=是对指定微服务的个虚拟划分
1.
Instance

微服务的实例

1.DataID

指定spring.profile.active和配置文件的DataId来使不同环境下读取不同的数据

  • 新建test的DataId

  • 修改application.yml
  1. spring:
  2. profiles:
  3. active: test
  • 重启

2.Group方案

  • 新建两个组test环境

  • 修改bootstrap.yml为测试环境的组
  1. server:
  2. port: 9004
  3. spring:
  4. application:
  5. name: config
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 192.168.31.100:8848
  10. config:
  11. server-addr: 192.168.31.100:8848
  12. file-extension: yaml
  13. group: DEV_GROUP
  • 重启

3.namespace

  • 创建命令空间

  • 查看服务列表

  • dev创建配置

  • 修改bootstrap.yml
  1. server:
  2. port: 9004
  3. spring:
  4. application:
  5. name: config
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 192.168.31.100:8848
  10. config:
  11. server-addr: 192.168.31.100:8848
  12. file-extension: yaml
  13. group: TEST_GROUP
  14. namespace: 88f92e71-04fa-4c13-8892-736adb162f47
  • 重启

相关文章