简介
Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了一起。通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处,在以往的教程中介绍Spring Cloud Config时也有提到,主要有以下几点:
- 分离的多环境配置,可以更灵活的管理权限,安全性更高
- 应用程序的打包更为纯粹,以实现一次打包,多处运行的特点
如果对配置中心概念不理解可以回顾另一篇博客,https://blog.csdn.net/u014553029/article/details/88560678
本文主要记录:Nacos作为配置中心的功能
一、在Nacos管理平台新建配置
进入Nacos的控制页面,在配置列表功能页面中,点击右上角的“+”按钮,进入“新建配置”页面,如下图填写内容:
配置说明:
- Data ID:填入nacos-config-client.yml
- Group:不修改,使用默认值DEFAULT_GROUP
- 配置格式:选择YAML
- 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置,比如:
user:
name: ouyang
age: 18
sex: male
server:
port: 8888
context-path: /config-demo1
二、获取&使用配置
2.1 创建一个Spring Boot应用,可以命名为:nacos-config-client
2.2 编辑pom.xml,加入必要的依赖配置,比如:
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
上述内容主要三部分:
- parent:定义spring boot的版本
- dependencyManagement:spring cloud的版本以及spring cloud alibaba的版本,由于spring cloud alibaba还未纳入spring cloud的主版本管理中,所以需要自己加入
- dependencies:当前应用要使用的依赖内容。这里主要新加入了Nacos的配置客户端模块:spring-cloud-starter-alibaba-nacos-config。由于在dependencyManagement中已经引入了版本,所以这里就不用指定具体版本了。
2.3 编辑配置文件bootstrap.properties,并配置服务名称和Nacos地址
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
#spring.cloud.nacos.config.contextPath=/nacos
# 应用名称
spring.application.name=nacos-config-client
server.port=8888
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置文件格式
spring.cloud.nacos.config.file-extension: yaml
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
特别说明:这里必须使用bootstrap.properties。同时,spring.application.name值必须与上一阶段Nacos中创建的配置Data Id匹配(除了.properties或者.yaml后缀)
2.4 使用配置
定义一个Controller,其中通过@Value注解,注入项目中的配置(默认为空字符串),这个配置会通过/config接口返回,用于验证我们系统是否已经加载到相关配置。另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。
@RestController
@RefreshScope
@RequestMapping("config")
public class NacosConfigController {
@Value("${user.name}")
private String userName;
@Value("${user.age:}")
private String userAge;
@Value("${user.sex}")
private String userSex;
@GetMapping
public String getUserName() {
String userConfig = String.format("userName:%s, userAge:%s, userSex:%s",userName,userAge,userSex);
System.out.println(userConfig);
return userConfig;
}
}