Springcloud Nacos 配置共享

104 阅读2分钟

Nacos 配置共享分为两种场景:

  1. 同一个微服务针对不同环境有不同的配置,将这些不同环境配置里面的相同部分,
    提取出来共享
  2. 不同微服务相同的公共配置,提取出来共享

1. 同一个微服务不同环境下的配置共享

不同环境的配置共享,通过data-id 的名称后缀实现

1.1 将同一微服务不同环境下的配置提取为公共配置

image.png

1.2 创建 dev 环境独有配置

image.png

1.3 创建 test 环境独有配置

image.png

1.4 修改 bootstrap.yml

spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: 192.168.88.151:8848 # nacos的服务端地址
        file-extension: yaml # 配置文件格式
  profiles:
    active: test # 环境标识 标记引入的是哪个环境的配置,当前是 test环境,即 service-product-test.yaml

1.5 创建controller

/product/src/main/java/org/example/controller/NacosConfigController.java

package org.example.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
@RefreshScope
public class NacosConfigController {

    @Value("${config.appName}")
    private String appName;



    // 商品信息
    @RequestMapping("/nacos/config")
    public String getConfig() {
        return appName;
    }

    @Value("${config.env}")
    private String env;
    // 商品信息
    @RequestMapping("/nacos/config2")
    public String getConfig2() {
        return env;
    }
}

1.6 重启服务验证

重启product 服务后,访问 http://127.0.0.1:8003/nacos/config2/
出现 test 即表示成功。

2. 不同微服务的配置共享

不同微服务的配置共享,通过在bootstrap.yml 文件中导入指定配置实现。

2.1 创建公用配置

image.png

2.2 引入公用配置

修改 bootstrap.yml

spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: 192.168.88.151:8848 # nacos的服务端地址
        file-extension: yaml # 配置文件格式
        shared-dataids: all-service-common.yaml  # 引入公共配置
        refreshable-dataids: all-service-common.yaml   # 引入公共配置
  profiles:
    active: test # 环境标识

2.3 创建controller

product/src/main/java/org/example/controller/NacosConfigController.java

package org.example.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
@RefreshScope
public class NacosConfigController {

    @Value("${config.appName}")
    private String appName;



    // 商品信息
    @RequestMapping("/nacos/config")
    public String getConfig() {
        return appName;
    }

    @Value("${config.env}")
    private String env;
    // 商品信息
    @RequestMapping("/nacos/config2")
    public String getConfig2() {
        return env;
    }

    @Value("${config.common.tips}")
    private String commonTips;

    @RequestMapping("/nacos/config3")
    public String getConfig3() {
        return commonTips;
    }
}

2.4 验证

重启product 服务后,访问 http://127.0.0.1:8003/nacos/config3/
出现 this is all service common yaml 即表示成功。

image.png

相关阅读:Nacos 命名空间和配置分组