一. 简单示例
使用 Nacos 作为配置中心,将配置变脸存放到 Naco 上, 需要读取配置变量的服务连接 Nacos,读取 Nacos 上的配置文件读取到变量,并且可以做到动态刷新
在 Nacos 上创建创建配置列表
- 启动 Nacos 进行访问,点击配置列表,点击 “+” 新建配置,输入 DataId 此处先简单理解为存放配置变量的配置文件名称,输入 Group 默认是 “DEFAULT_GROUP”, 输入当前创建的配置文件描述信息,设置当前配置文件类型,输入文件内容,也就是保存的变量
- Nacos 作为注册中心分级保存配置文件方式
文件名相同,使用默认的 Group 分组,默认的 namespace 命名空间,通过环境的不同来配置
文件名相同,环境相同,通过不同的 Group 不同来配置
文件名相同,环境相同,通过 namespace 命名空间不同来配置(命名空间默认是 Public)
- Nacos 上创建命名空间,获取到命名空间id,可以将该id在项目yml 文件中配置到 namespace 上
创建通过 Nacos 读取配置文件的服务
- pom 文件中添加依赖
<!-- nacos config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>
- 创建 bootstrap.yml 配置文件(系统级别,先加载 bootstrap.yml 然后加载application.yml),配置当前服务注册到哪个 Nacos 注册中心,通过哪个 Nacos 读取配置文件
server:
port: 3377 #当前服务端口号
spring:
application:
name: nacos-config-client #当前服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址,将当前服务注册到Nacos上
config:
server-addr: localhost:8848 #Nacos作为配置中心地址,当前服务通过 Nacos 配置中心读取配置文件
file-extension: yaml #指定在Nacos配置中心读取的文件类型yaml格式配置
#读取文件还需要指定哪个环境下的文件,在当前项目中的application.yml 文件中进行了配置
#group: TEST_GROUP #指定分组,读取 Nacos 上哪个分组下的配置文件
#namespace: 6fecc7ae-f02f-49ef-ace7-80d2f671df77 #指定 Namespace 读取 Nacos 上哪个 namespace 的文件
#${prefix}-${spring.profile.active}.${file-extension}
# ${spring.application.name}-${spring.profile.active}.${file-extension}
# nacos-config-client-dev.yml
- 创建 application.yml (可以不创建将此处的设置统一配置到 bootstrap.yml 中,此处只是做一个分级的示例)
spring:
profiles:
active: dev #表示开发环境(通过该开发环境的设置,指定读取 Nacos 上哪个环境的配置文件)
- 启动类增加 @EnableDiscoveryClient
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigMain3377.class,args);
}
}
- 项目中通过 Nacos 获取变量的代码示例,该类使用 @RefreshScope 修饰,开启自动刷新功能,当更改 Nacos 上当前读取的变量的值时,会自动刷新
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getVal(){
return configInfo;
}
}
- 最终实现的效果,当前服务启动时,在 (config. server-addr=localhost:8848)Nacos 上读取名称与当前服务相同的环境是当前服务application.yml中配置的 ()spring,profiles.active=dev) dev 环境,类型是(file-extension: yaml) yaml 的配置文件,也就是读取到 Nacos 上的 “nacos-config-client-dev.yaml” 配置文件