目录
最近在学习nacos相关时碰到一个问题,在nacos中配置了yaml文件后,无论如何都无法在项目中读取,项目加载便会报异常无法启动, 在经历了修改yaml后缀、添加依赖、删除依赖、重启大法、修改spring-application-name等诸多操作耗时一天未果之后,终于将其解决。
环境
一定要注意版本匹配问题
-
Springboot 2.5.4
-
SpringCloud 2020.0.4
-
SpringCloud Alibaba 2.2.6.RELEASE
-
Nacos 2.0.2
父工程依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<!-- SpringCloud 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud Alibaba 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencies>
</dependencyManagement>
子工程依赖
<dependencies>
<!-- 服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 分布式(微服务)配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 微服务的bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
配置文件
yaml方式
如果你采用了yaml配置方式,但出现了标题中的错误,请仔细看如下的内容。
1. bootstrap.yml
此处一定需要确保server-addr配置正确,以及file-extension为yaml(在项目中bootstrap及其它文件可使用后缀为yml或yaml,但nacos中配置文件后缀必须使用yaml)
spring:
application:
name: video
cloud:
nacos:
config:
server-addr: ip:8848 # nacos 所在的地址
file-extension: yaml
2. nacos中心DataID
项目名称-环境.yaml,此处的项目名称要使用上一步bootstrap.yml文件中application下的name属性,我的配置为video,则DataId为
开发环境 video-dev.yaml
生产环境 video-prod.yaml
这里的yaml不可以写成yml,务必注意!
3. 配置参数
yaml 文件的格式务必注意 (我就是被这个坑了很久)
例如此处我需要获取nacos中一个counts属性的值,则配置如下,一定注意counts和后边数值之间的空格, 如果没有加空格的话会导致标题所示的错误。
nacos:
counts: 111
properties方式
1. bootstrap.properties
默认为properties,此处不需要指定file-extension
spring.application.name=video
spring.cloud.nacos.config.server-addr=ip:8848
2. nacos中心DataID
项目名称-环境.properties,此处的项目名称要使用上一步bootstrap.properties文件中spring.application.name属性,我这里配置为video,则DataId为
开发环境 video-dev.properties
生产环境 video-prod.properties
注意properties的拼写,不要少多写或少写字母。
3. 配置参数
例如此处我需要获取nacos中一个counts属性的值,则配置如下。
nacos.counts=555
使用
配置完成后,通过如下方式获取配置的属性值
@Value("${nacos.counts}")
private Integer counts;
更多信息请参考官方文档