Nacos拉取配置信息失败,@Value exception is java.lang.IlleggalArgumentException: Could not resolve placeholder

具体报错内容如下:

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依赖:

<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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.6</version>
        </dependency>

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值