zoukankan      html  css  js  c++  java
  • 异常:java.lang.IllegalArgumentException: Could not resolve placeholder 'xxx' in value "${xxx}"

    一开始以为又是下划线的原因,后来才发现,原来应用名和yml配置的文件需要命名一致才行。

    开端:

    打算通过客户端访问服务端,服务端访问github配置文件的方式,使client客户端动态获取github上配置信息。

    我通过git bash一共上传了两个yml配置文件到github,一个是服务端配置文件,另一个是客户端配置文件。

    其中客户端yml配置文件的命名不正确,与在eclipse中yml声明的不一致,结果就是它导致了客户端的yml失效。

    测试:

    测试的时候,服务端启动正常,并且可以正常访问github上的服务端yml,因为服务端的命名正确,但是客户端就无法获得配置文件的内容。

    测试类里通过注解获得配置文件的参数:

        @Value("${spring.application.name}")
        private String applicationName;
    
        @Value("${eureka.client.service-url.defaultZone}")//就是这里无法获得github上yml配置文件参数,可以想象得到,是yml文件错误或失效。
        private String eurekaServers;

    客户端启动,由于无法获得github上配置文件的参数,它报无效参数异常了;

    Caused by: java.lang.IllegalArgumentException: 
    Could not resolve placeholder 'eureka.client.service-url.defaultZone' in value "${eureka.client.service-url.defaultZone}"

    为什么我知道一定是参数没有被获取呢?因为启动客户端时,端口号没有从github上的yml文件中动态获取,同时它报了这个错。

    排查:

    我确认所有的代码都没有问题,包括配置文件的内容,pom依赖,启动类,测试类都没有问题。

    那么只剩下排查配置文件命名是否正确了,原来是yml配置文件的命名还有讲究,不是随便写,而是要对应写才行。

    总结;

    由于客户端的端口号配置在github上的yml里,而对应的yml文件名称又没有写对,结果整个失效的yml配置文件就无法提供内部各种参数,

    这导致了测试类中通过value注解注入到spring里的配置文件参数无法被获得,结果就报了这种异常。

    原来并不是下划线惹的祸,而是命名不一致造成的,今天我竟然错怪了下划线。

    至于ribbon,它的应用名的确不支持下划线。

  • 相关阅读:
    VS中生成时“sgen.exe”已退出,代码为 1解决办法
    配置 influxDB 鉴权及 HTTP API 写数据的方法
    InfluxDB 的UTC时间问题与简单的持续查询语句
    C# 中HttpClient的使用中同步异步问题
    Action<T> Delegate
    Task Class
    .net4.0、.net4.5、.net4.6 三者对系统的要求
    vue 组件动态 循环
    js 取得当天0点 / 23:59:59 时间
    vue中element-ui树形控件自定义节点,注意一下
  • 原文地址:https://www.cnblogs.com/timingstarts/p/12720218.html
Copyright © 2011-2022 走看看