在学习Nacos时,idea总是报错:Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'pattern.dateformat' in value "${pattern.dateformat}"
Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'pattern.dateformat' in value "${pattern.dateformat}"
报错具体信息:
我们可以看是否有bootstrap.yml文件
我原本里面的 bootstrap.yml文件如下,这是学习视频中照敲的代码。发现报错
检查bootstrap.yml文件的name和active和file-extension是否与Nacos中的DataID是否对应;还有是否是在默认的public命名空间下,如果不是,则需要在config下再写namespace配置
然后需要将代码改成
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos地址
config:
server-addr: localhost:8848 # nacos地址
file-extension: yaml # 文件名后缀
没错,需要将config下也配置nacos的地址。至于为什么:
-
服务发现 (
discovery
): 这个server-addr
配置是用于服务注册与发现的。当一个微服务启动时,它会将自己的信息注册到 Nacos,这样其他服务就可以通过 Nacos 来发现并调用它。这里的server-addr
指定了 Nacos 服务器的地址,以便服务可以注册自己并被其他服务发现。 -
配置管理 (
config
): 另一个server-addr
配置是用于配置管理的。在微服务架构中,服务的配置信息(如数据库连接信息、API 密钥等)通常不会硬编码在代码中,而是存储在外部的配置中心。这样,当需要更改配置时,只需在配置中心进行更改,而不需要重新部署服务。这里的server-addr
同样指定了 Nacos 服务器的地址,但这次是为了让服务从 Nacos 配置中心获取配置信息。
在Usercontroller层里,可以加@RefreshScope也可以不用,@RefreshScope是实现配置热更新的,也不用将@Value改成@NacosValue
再在bin目录下cmd启动Nacos
再启动UserApplication,访问User端口号
服务正常启动
访问成功,问题解决