# Nacos 配置中心

# maven依赖

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

# 配置

在以前的版本中会创建一个 bootstrap.yml 来把配置放在这个文件,让他优先加载
但是 在 Spring Cloud 2021 开始就不在扫描 bootstrap.yml 这个文件了,所以就在 application.yml 里面就行了

从2021.0.5版本起,Spring Cloud将不再默认启用bootstrap 包,所以针对该问题,解决方案有两种:

  1. application.yml中添加以下配置,用以指定引入的配置文件。
spring:
  config:
    import: nacos:${spring.application.name}.:${spring.cloud.nacos.config.file-extension}
  1. pom或build.gradle中引入boostrap依赖包
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>4.0.1</version>
</dependency>

implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap:4.0.1'

# 读取配置文件

  1. 在 Nacos 上新建配置文件配置文件的命名,是有要求的,在项目启动的时候,会在控制台上打印文件名
user:
  username: 123
  1. 配置 Nacos 地址
spring:
  cloud:
    nacos:
      config:
        file-extension: yml
        server-addr: localhost:8848
  1. 读取配置文件,这里以输出为例
    在项目启动的时候,会去加载配置文件,到本地,这里的 user.username 也就是放在了 Nacos 上的配置
@RestController
@RequestMapping("/depart")
@RequiredArgsConstructor
public class DepartController {

    @Value("${user.username}")
    private String name;

    @GetMapping("/name")
    public String username() {
        return name;
    }
}

# Nacos 配置文件共享

# 同一个组共享

共享文件必须在同一个group + namespace

spring:
  cloud:
    nacos:
      config:
        file-extension: yml
        server-addr: 124.222.183.73:8848
        shared-configs[0]:
          data-id: sharconfig.yml
          refresh: true

# 不同的 group 和 namespace共享

spring:
  cloud:
    nacos:
      config:
        file-extension: yml
        server-addr: 124.222.183.73:8848
        extension-configs[0]:
          data-id: sharconfig.yml
          refresh: true

# 同时有 shared-configs 又既有 extension-configs

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        file-extension: yml
        server-addr: 124.222.183.73:8848
        shared-configs[0]:
          data-id: sharconfig.yml
          refresh: true

        extension-configs[0]:
          data-id: sharconfig.yml
          refresh: true

加载顺序

  1. 共享配置
  2. 扩展配置
  3. 当前服务配置 若在三个配置中具有相同属性设置,但它们具有不同的值,那么,后加载的会将先加载的给覆盖

优先级顺序

  1. 当前服务配置
  2. 扩展配置
  3. 共享配置

# 快照

Spring Cloud 会把配置 下载一个保存到本地,定期的更新,他的加载顺序为
当加载到一个配置文件后,不会在继续加载后续的

  1. 本地配置
  2. 远程(Nacos)
  3. 快照

# 动态刷新

在类上标注 @RefreshScope 即可