8.Nacos配置中心

262 阅读2分钟

8.1 基本使用

8.1.1. 引入依赖

我们在device服务中引入nacos-config依赖

<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

8.1.2 创建配置文件,指定nacos配置中心地址

创建bootstrap.yml作为配置文件,指定nacos配置中心地址

spring:
  application:
    name: smart-device
  cloud:
    nacos:
      config:
        server-addr: 192.168.56.200:8848 # nacos配置中心地址
        file-extension: yaml # 配置文件格式
  profiles:
    active: dev # 开发环境

8.1.3 在nacos配置中心添加配置内容

在nacos配置中心控制台,新建配置的Data ID为smart-device-dev.yaml,

【注意】:新建配置的Data ID命名规则:服务名称-环境.配置文件格式

把之前device服务的application.yaml中的配置内容复制到nacos新建配置中。

nacos配置中心-新建配置

最后注释application.yaml中的配置内容,启动device服务,验证可以读取到nacos配置中心的配置内容。

@RestController
@RequestMapping("/device")
@Slf4j
public class DeviceController {

 
    @Value("${server.port}")
    private String port;

    @GetMapping("/testNacos")
    public void testNacos() {

        log.info("port:{}", port);
    }

可以看到读取到了nacos配置中心的port端口配置。

读取nacos配置中心中的配置

8.2 配置动态刷新

当nacos配置修改之后,程序是无法读取到修改之后的配置。当开启动态刷新,修改nacos配置之后,就可以读取到最新修改的配置值。

只需要在需要读取配置的类上加上动态刷新注解@RefreshScope


@RestController
@RequestMapping("/device")
@Slf4j
@RefreshScope
public class DeviceController {

 
    @Value("${server.port}")
    private String port;

    @GetMapping("/testNacos")
    public void testNacos() {

        log.info("port:{}", port);
    }
}

新修改了port为8081,我们看到程序读取到了新的port。

新修改了port为8081

程序读取到了新的port

8.2 配置共享

在不同微服务之间一般会存在一些公共的重复配置,我需要把这写配置单独放在一个公共配置中,然后各个微服务工程引入。

8.2.1 创建公共的共享配置

Data ID:为common.yaml,公共配置如下,主要是数据源和nacos注册中心等公共配置:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.56.200:3306/device?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: password

  # nacos地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.56.200:8848

公共配置

8.2.2 引入公共配置

在device服务工程配置文件中,引入公共配置

spring:
  application:
    name: smart-device
  cloud:
    nacos:
      config:
        server-addr: 192.168.56.200:8848 # nacos配置中心地址
        file-extension: yaml # 配置文件格式
        shared-dataids: common.yaml # 要引入的公共配置
        refreshable-dataids: common.yaml # 指定要实现动态配置刷新的配置
  profiles:
    active: dev # 环境:开发环境

8.2.3 启动device服务测试

删除device工程原有配置文件中公共的配置,例如数据源配置。然后启动device服务,测试能否读取到公共配置中的datasource数据源配置。

@RestController
@RequestMapping("/device")
@Slf4j
@RefreshScope
public class DeviceController {


    @Value("${spring.datasource.username}")
    private String username;

    @GetMapping("/testNacosCommon")
    public void testNacosCommon() {

        log.info("username:{}", username);
    }
}

我们看到读取到了公共配置中的spring.datasource.username数据源用户名了。

读取到公共配置了