具体报错内容如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'pattern.dateformat' in value "${pattern.dateformat}"
引发此错误的代码
@Value("${pattern.dateformat}") public String pattern;
事实上,此问题并不是由这段代码引起,而是由于bootstrap配置信息缺失,导致找不到Nacos上的资源。我的配置信息在dev的namespace中,没有配置namespace信息导致解析时默认跑到了public中寻找,当然找不到了!找不到资源并不会像想象中报Cannot find resource的错误,而是直接报无法解析placeholder的错误。
解决方法是:在bootstrap中添加如下代码
spring: application: name: userservice profiles: active: dev #这个写你的namespace的真实名称, 如果你的文档在public中,就不用写 cloud: nacos: discovery: server-addr: localhost:8848 namespace: 11288221-e817-4a2e-9986-015c3d5240cc config: file-extension: yaml #文件名后缀 prefix: servername #文件名前缀,这里写你的服务名称 namespace: 11288221-e817-4a2e-9986-015c3d5240cc #这个就是引发问题的关键, 不写这个就报错,他就是命名空间的ID,直接去nacos复制即可。 与discovery中的配置相同。若你的文件在public中,这一行就不写, 包括上面的discovery,也不写 server-addr: localhost:8848
再次运行服务,过了!
补充:编写bootstrap所需要的pom依赖:
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.cloud spring-cloud-starter-bootstrap 3.1.6
来源地址:https://blog.csdn.net/CSDN_user096A/article/details/131660704