SpringCloud 开发随笔

Nacos 配置中心

Nacos Config 引入不生效

错误日志信息

Spring Cloud 项目引入 Nacos Config 的 Maven 依赖后,使用 @Value 注解无法读取 Nacos 配置中心的内容,抛出的异常信息如下

1
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'common.name' in value "${common.name}"

第一种错误原因

Spring Cloud 无法读取项目中的 bootstrap.yml 配置文件,此时需要额外引入 spring-cloud-starter-bootstrap 依赖来解决

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

第二种错误原因

项目中 bootstrap.yml 配置文件的内容有误,导致 Nacos Config Spring Cloud 无法通过正确的 dataId 去 Nacos 配置中心获取对应的配置信息,正确的配置示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server:
port: 8080

spring:
application:
name: seamall-coupon
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 # 配置中心的地址
namespace: 73975db4-5c7f-4fef-9ea9-36492bd59f45 # 命名空间
group: TEST_GROUP # 配置分组
file-extension: yaml # 由于当前环境对应的 profile 为 dev,因此这里完整的 dataId 就是 seamall-coupon-dev.yaml

上述 bootstrap.yml 配置文件对应的 Nacos Config 配置内容如下图所示

上述 bootstrap.yml 配置文件的详细说明如下

bootstrap.yaml 配置文件中,需要配置 spring.application.name,因为它是构成 Nacos Config 配置管理 dataId 字段的一部分。值得一提的是,在 Nacos Config Spring Cloud 中,dataId 的完整格式如下:

1
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置,目前只支持 propertiesyaml 类型
  • spring.profiles.active 即为当前环境对应的 profile。特别注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式会变成 ${prefix}.${file-extension}