目录
一、为什么需要配置中心
把配置信息写在nacos配置中心里,相比于把配置信息写在application.yml等配置文件里,有以下好处
- 实时生效:在
application.yml
中配置的参数,若要修改就必须重启应用程序。而 Nacos 配置中心支持动态配置更新,当配置发生变更时,应用程序能实时感知到并自动更新配置,无需重启,从而保证系统的高可用性和不间断运行。例如,在电商系统中,促销活动的折扣率、限时抢购的时间范围等配置随时可能调整,使用 Nacos 配置中心就能快速响应这些变化,及时生效。 - 统一维护:对于微服务架构而言,每个服务都有自己的配置文件,管理起来较为繁琐。Nacos 配置中心可以把所有服务的配置集中管理,提供统一的界面和 API 来进行配置的增删改查操作,提升了配置管理的效率和可维护性。比如,在一个包含多个微服务的项目中,数据库连接信息、缓存服务器地址等公共配置可以统一存放在 Nacos 中,方便统一修改和维护。
- 版本控制:Nacos 配置中心支持配置的版本管理,你能够查看配置的历史版本,回滚到之前的某个版本。这在配置修改出现问题时非常有用,可以快速恢复到正常状态。
- 多环境配置:在不同的环境(如开发、测试、生产)中,应用程序的配置可能存在差异。Nacos 配置中心支持多环境配置管理,你可以为每个环境创建独立的配置集,并且可以设置配置的继承关系,减少配置的重复编写。
二、nacos配置中心的使用
1.版本选择
- springBoot : 2.6.13
- springCloud : 2021.0.5
- springCloudAlibaba : 2021.0.5.0
- nacos : 2.2.0
2.pom.xml依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--配置中心的maven依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
3.bootstrap.yaml配置
server:
port: 9001
spring:
application:
#项目名称
name: cloud-provider
cloud:
nacos:
discovery: #服务发现配置
#nacos地址
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config: #注册中心配置
#nacos地址
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
file-extension: yaml
- nacos作为配置中心时的配置必须声明在bootstrap.yaml中,其比application.yaml有更高的优先级,会在项目执行前将nacos的配置拉取到本地,然后才会读取application.yaml运行项目
4.Nacos控制台新建配置中心
Data ID 的命名格式:
Data ID 是配置集的唯一标识,一个应用可以包含多个配置集,每个配置集都需要被一个有意义的名称标识。那么 Data ID 怎么取值呢?格式通俗一点就是 “前缀-环境-扩展名”,如下所示:
${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
① prefix:前缀,默认是 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。
# 若不指定,默认采用应用名的方案
spring:application:
name=cloud-provider
# 手动指定配置的dataID前缀标识
spring:cloud:
nacos:
config:
prefix=cloud-provider
② active:配置运行环境,即为当前环境对应的 profile。
注意:当 spring.profiles.active 为空时,对应的连接符 ”-“ 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
③ file-exetension:配置文件的类型,默认是 properties,也可以通过配置项 spring.cloud.nacos.config.file-extension 来配置,目前支持的类型有 TEXT、JSON、XML、YAML、HTML、Properties
# 指定配置文件类型为yaml文件
spring:cloud:
nacos:
config:
file-extension=yaml
④ 最终配置:
经过前面三个步骤,我们最终在nacos配置中心的控制台新增配置文件就是:cloud-provider.yaml
5.编写测试类
package com.dhp;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author dhp
* @create 2025-04-03 13:38
*/
@RefreshScope //配置发布之后,动态刷新配置
@RestController
@RequestMapping("/user")
public class ProviderController {
// 使用@Value()导入配置
@Value("${user.id}")
private String id;
@Value("${user.name}")
private String name;
@Value("${user.age}")
private String age;
@GetMapping("/getConfig")
public String getConfig() {
return "我是provider,已成功获取nacos配置中心的数据:(id:" + id + ",name:" + name + ",age:" + age +")";
}
}
6.测试
1.访问http://localhost:9001/user/getConfig,查看是否获取到了配置中心的数据
2.修改配置中心数据
再次访问