zoukankan      html  css  js  c++  java
  • 关于使用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 直接覆盖依赖包的配置

  • 相关阅读:
    XP系统开机慢和减少开机滚动条的解决方法
    细说A标签的样式
    【部分转载】安装MySQL,visual studio tools for office 2010 runtime通不过
    将GB2312转码成UTF8
    ubuntu/vmware 拷贝后网路不通
    bash manual
    跟我一起写 Makefile
    我的vi 启动配置文件
    ubuntu安装samba
    upnp
  • 原文地址:https://www.cnblogs.com/ymqj520/p/13627113.html
Copyright © 2011-2022 走看看