SpringCloud集成nacos配置中心
一、环境配置
1.1 环境版本
- JDK:1.8
- spring boot:2.2.6.RELEASE
- spring cloud:Hoxton.SR1
- spring cloud starter alibaba nacos config:2.2.6.RELEASE
- nacos:1.3.0
1.2 核心maven引入
<!-- SpringCloud Ailibaba Nacos Config -->
<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>
二、使用步骤
2.1. 添加配置文件
进入 nacos 控制台添加所需的配置文件:
其中的 Data ID本例就使用:nacos-config-dev.yaml
2.2. 项目配置
bootstrap.yml 配置文件的编写:
server:
port: 8000
spring:
application:
name: nacos-config-demo
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml # 文件后缀名
name: nacos-config-dev # 配置文件名
配置解释:
spring.cloud.nacos.discovery.server-addr
: 配置nacos的服务地址,本例使用的是本地启动的单机nacos
spring.cloud.nacos.config.server-addr
: 配置nacos配置中心的地址
spring.cloud.nacos.config.file-extension
: 配置文件的后缀名称
spring.cloud.nacos.config.name
: 指定配置文件名称
2.3 项目代码测试
我们编写一个接口来获取nacos配置的内容进行测试:
@RestController
@RefreshScope //该注解使当前类下的配置支持Nacos的动态刷新功能。
public class OrderController {
@Value("${user.id}")
public String id;
@Value("${user.name}")
public String name;
@GetMapping(value = "/nacos/config")
public String getOrder() {
return "用户id:" + id + ",用户name:" + name;
}
}
2.4. 测试
启动项目,访问地址:http://localhost:8000/nacos/config
如果可以正确响应内容:用户id:123,用户name:test
就说明配置成功了!
三. 遇到的问题
这个异常通常是因为Spring无法解析某个占位符导致的。出现这种情况可能是以下原因之一:
- 属性文件中没有定义该占位符:检查属性文件中是否存在该占位符,如果不存在,需要在属性文件中添加相应的配置。
- 属性名拼写错误:检查占位符的名称是否正确。可能会发生拼写错误或大小写不匹配等问题。
- 属性值格式不正确:检查占位符的值是否正确。例如,如果占位符的值应为整数,则必须将其转换为int类型。
- 占位符使用方式错误:检查占位符的使用方式是否正确。如果使用@Value注解注入属性,则需要按照正确的语法格式进行使用,例如
@Value("${propertyName}")
。
要排查这个异常,可以按照以下步骤操作:
- 检查属性文件:检查属性文件中是否存在该占位符,并确保占位符的名称和值正确。
- 检查注入方式:检查占位符的注入方式是否正确,例如是通过@Value注解还是通过Environment对象获取等。
- 打印日志:在代码中添加打印日志的语句,以便更好地定位问题。可以使用logback或log4j等日志框架输出相关信息。
通过以上步骤,可以帮助您更好地定位并解决Could not resolve placeholder
这个异常。
对于本例而言一开始遗漏了 name: nacos-config-dev # 配置文件名
这句配置,导致启动一直报错:IllegalArgumentException: Could not resolve placeholder。