SpringCloudAlibaba:nacos作为配置中心

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

一、配置中心简介

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 的完整格式如下:

${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文件

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.application.yml

spring:
  profiles:
    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

server:
  port: 9004
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.31.100:8848
      config:
        server-addr: 192.168.31.100:8848
        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中的配置内容之后,这里也会马上生效。

@RestController
@RefreshScope
public class ConfigController {
    @Value("${config.info}")
    private String info;
    @GetMapping("/config/info")
    public String info(){
        return info;
    }
}

5.启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }

}

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
spring:
  profiles:
    active: test
  • 重启

2.Group方案

  • 新建两个组test环境

  • 修改bootstrap.yml为测试环境的组
server:
  port: 9004
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.31.100:8848
      config:
        server-addr: 192.168.31.100:8848
        file-extension: yaml
        group: DEV_GROUP
  • 重启

3.namespace

  • 创建命令空间

  • 查看服务列表

  • dev创建配置

  • 修改bootstrap.yml
server:
  port: 9004
spring:
  application:
    name: config
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.31.100:8848
      config:
        server-addr: 192.168.31.100:8848
        file-extension: yaml
        group: TEST_GROUP
        namespace: 88f92e71-04fa-4c13-8892-736adb162f47
  • 重启

相关文章