# nacos

# 安装

https://nacos.io/zh-cn/docs/quick-start-docker.html (opens new window) 可以使用 docker 方式,很简单的就能搭建起来。 官方文档中的安装步骤很详细。

# 作为 spring cloud config 配置中心

spring cloud config nacos config 配置文档 (opens new window)

添加依赖

ext {
    set('springCloudVersion', "2022.0.2")
    set('springCloudAlibabaVersion', "2022.0.0.0-RC1")
}
dependencies {
	implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
}
1
2
3
4
5
6
7

application.yml

spring:
  application:
    name: demo
  profiles:
    active: dev
  config:
    import: "optional:nacos:${spring.application.name}-${spring.profiles.active}.yml?refresh=true"
  cloud:
    # Nacos帮助文档: https://nacos.io/zh-cn/docs/v2/concepts.html
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: dev
        group: DEFAULT_GROUP
        # 认证信息
        #        username: nacos
        #        password: nacos
        fileExtension: yaml
        import-check:
          enabled: false
      discovery:
        server-addr: 127.0.0.1:8848
        # 注册到 nacos 的指定 namespace,默认为 public
        namespace: dev
        group: DEFAULT_GROUP
        # 认证信息
#        username: nacos
#        password: nacos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

WARNING

如何实现 Spring Cloud Config 的功能?就是应用在启动的时候,可以自动取配置中心拉取 application.yml 和 application-dev.yml 这样的外部配置文件 Spring boot 3 中去掉了从 boostarp.yml 读取配置文件的方式,如果要支持,需要额外的依赖包。 但是提供了一个新的配置 spring.config.import (opens new window) ,Nacos Config 也支持这种方式,它的语法是 [optional:]nacos: {data-id}

  • optional:表示该配置是可选的,如果不存在也不会报错,不加的话,如果配置文件不存在会打印一个警告
  • nacos:表示使用 nacos 协议
  • data-id:就是 nacos 中的 data-id 了,比如配置文件 demo.yml

一般这里会模仿 spring cloud config 要读取的配置文件:application.yml 和 环境配置文件,比如 application-dev.yml 比如optional:nacos:${spring.application.name}-${spring.profiles.active}.yml?refresh=true 要支持两个文件的话,就需要逗号隔开,比如:optional:nacos:${spring.application.name}.yml,optional:nacos:${spring.application.name}-${spring.profiles.active}.yml

写配置类,有自动刷新的功能,在配置中心修改之后,程序中该对象下的配置就会被刷新

@ConfigurationProperties(prefix = "app")
@Data
@ToString
public class AppConfig {
    private String user;
}
1
2
3
4
5
6