前言
在了解网关后,知道网关需要注册中心来监控,以及需要统一的配置文件中心,进行配置文件管理;
前提
在搭建配置中心时,需要先下载并运行Nacos;
搭建时请严格按照 Nacos 依赖关系构建项目,不然会有意想不到的收获,甚至自闭一段时间;
下面时我拷贝的一份依赖关系图:

版本说明 · alibaba/spring-cloud-alibaba Wiki
构建项目依赖管理
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
<hutool.version>5.6.2</hutool.version>
<alibaba.version>2.2.5.RELEASE</alibaba.version>
<spring.boot.vsersion>2.3.2.RELEASE</spring.boot.vsersion>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.vsersion}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
以上是搭建nacos-config配置中心需要管理的依赖;
构建子模块
项目关系

pom.xml 依赖引入
<dependencies>
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
resource配置
在 resource 目录下,新建 bootstrap.yml 文件,并写入配置:
spring:
cloud:
nacos:
config:
file-extension: yaml
server-addr: 127.0.0.1:8848
application:
name: nacos-config
启动类
@SpringBootApplication
public class NacosConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
String useLocalCache= applicationContext.getEnvironment().getProperty("useLocalCache");
System.err.println("useLocalCache :" + useLocalCache+ "<<<<<<");
}
}
此处目的是,打印出 useLocalCache
配置是否从 nacos服务中的配置管理里面动态获取到了。
构建controller 测试动态配置
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
@RefreshScope 用来动态刷新配置的。
测试步骤
1. 写一个 yaml
配置到 nacos 服务里面
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example.properties&group=DEFAULT_GROUP&content=useLocalCache: true"
2. 启动 nacos-config 项目
GET 请求 http://localhost:8080/config/get:

3. 修改配置并重新查询
修改

再次查询

总结
至此,nacos的配置管理就完成的;
说一下这里碰到的几个坑:
- 版本依赖问题:
一开始我选择的是Spring Cloud 2020.0、Spring Cloud Alibaba 2021.1、Spring Boot 2.4.2.RELEASE,然后发现 Spring Boot 只有 2.4.2 版本,没有后缀 RELEASE,然后启动项目后,发现一直获取不到nacos上设置的值,网上百度了一堆,自己也都尝试了下,发现都不行,最后就决定给版本降级,事情就解决了,如果有知道原因的小伙伴,可以私聊告诉我,感谢!
- 容易混淆的文件扩展:
bootstrap.yml的文件后缀,和 bootstrap.yml 里面配置的
file-extension: yaml
,是不同的东西;
file-extension: yaml
指的是基于 dataid 为 yaml 的文件扩展名配置方式,这个是nacos服务里面的配置,是我们动态刷新获取的配置的格式,不是我们构建的项目里的bootstrap.yml
。
网友评论