• 异常: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,它的应用名的确不支持下划线。

  • 相关阅读:
    abap 调用Http --“Get”
    SAP-PI接口创建中的ABAP处理(不含PI配置)
    ALV 监听事件
    ABAP动态创建内表并展示--自撸版
    ABAP动态生成内表的三种方法
    SAP BP字段增强--付款条件检查
    SAP RFC上传接口(包含发布Webservice地址)
    C# 时间函数
    配置Excel的DCOM权限
    ORA-12571 : TNS : 包写入程序失败
  • 原文地址:https://www.cnblogs.com/timingstarts/p/12720218.html
Copyright © 2020-2023  润新知