• 关于使用application.yml配置文件启动时 部分配置不生效 启动失败的问题


    问题场景:在新建一个Spring Boot Module(Spring Boot 版本2.1.5-RELEASE)时,将application.properties文件修改为application.yml,然后进行相关配置。
    其中配置了eureka.client.service-url.defaultZone:localhost:8095/eureka/ 然后启动。但是在启动时 连接的defaultZone 却是 eureka:8095/eureka/ 。
    然后新建了一个配置文件application-local.yml 使用相同的配置,然后切换active到local,再启动,发现可以正常的;连接到localhost:8095/eureka/。
    通过跟踪SpringBoot 的启动,最后发现在为EurekaClientConfigBean 绑定配置文件的属性时,application.yml中的配置被application.properties中的配置覆盖了

     

     

     

     可以看到,当存在多个配置文件时,会执行循环,当查找到第一条有效配置时就退出循环,而当使用application.yml文件时

    而正常的source结构应该时这样的,所以问题应该是出在,在初始化Binder的context时,多加进了一个application.properties。

     

    通过该代码可得知,properties的加载器是在yaml加载器之前的,所以如果在同目录下,会先加载application.propertis再加载application.yml,也就解释了为什么application.propertis 文件会在application.yml之前被读取到了。
     
    最后通过搜索所有的依赖类,终于在引入的stater包 找到了相关文件 application.properties.原来是因为该包中含有application.properties文件,而当我们的项目依赖该包时,该配置文件依然生效,并且优先于我们的application.yml加载。从而导致我们的配置失效。

     

    解决方案:
     
    1.指定profile-active。Spring会在查找配置文件时,加上profile-active后缀。
    2.删除依赖包中的application.properties
    3.application.yml 更改为application.properties 直接覆盖依赖包的配置

  • 相关阅读:
    <NET CLR via c# 第4版>笔记 第18章 定制特性
    <NET CLR via c# 第4版>笔记 第17章 委托
    <NET CLR via c# 第4版>笔记 第16章 数组
    <NET CLR via c# 第4版>笔记 第15章 枚举类型和位标志
    <NET CLR via c# 第4版> 读书笔记--目录
    <NET CLR via c# 第4版>笔记 第14章 字符,字符串和文本处理
    <NET CLR via c# 第4版>笔记 第13章 接口
    <NET CLR via c# 第4版>笔记 第12章 泛型
    python 之实例属性和类属性
    python 之获取对象信息
  • 原文地址:https://www.cnblogs.com/ymqj520/p/13627113.html
Copyright © 2020-2023  润新知