springboot不同版本加载yaml中的配置问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot不同版本加载yaml中的配置问题相关的知识,希望对你有一定的参考价值。

参考技术A 我在使用springboot的时候,发现不同的版本加载yaml的配置方式有所不同, 如果配置方法错误我经常报异常

报的错误如下:

2.解决

这个问题一般会出现在springboot2.2.0以后的版本中

springboot2.2.0以下(包括2.2.0)

springboot2.2.0以上

第一种方法

第二种方法

第三种方法

总结: springboot2.2.0以上加载yaml配置时,第一种方案适合只有一个配置文件类需要加载的情况,

第二种和第三种,适合多个配置文件同时加载的情况,个人更偏向第二种,因为优雅,简洁!

带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载

【中文标题】带有密钥 URL 的 Spring Boot YAML 配置不再使用版本 2 正确加载【英文标题】:Spring Boot YAML configuration with URL in key no longer loads correctly with version 2 【发布时间】:2018-11-27 08:43:33 【问题描述】:

我正在将我的应用程序从 Spring Boot 1.5 迁移到 2.0,并且 YAML 属性之一不再正确加载。以下配置sn -p:

myapp
  serviceUrls:
    'https://example.org/test': 'https://test.example.org/Endpoint'

映射到这个配置类:

@ConfigurationProperties(prefix = "myapp", ignoreUnknownFields = false)
public final class MyAppProperties 
  private Map<String, String> serviceUrls = new HashMap<>();
  //[...]

在 Spring Boot 1.5 中,它加载为带有 https://example.org/test -> https://test.example.org/Endpoint 的地图; 但在 Spring Boot 2.0 中,冒号和斜杠从映射键 httpsexample.orgtest -> https://test.example.org/Endpoint 中消失。

我在migration guide 中找不到任何提及。 Spring Boot 2 中的 YAML 解析是否发生了变化?有没有更好的方法来编写以 URL 作为键的 YAML 映射?

【问题讨论】:

你试过双引号或反斜杠吗? YAML 语法有时令人惊讶。 @KonstantinPelepelin 是的,我都试过了,但我的钥匙仍然损坏。更奇怪的是,提供给org.yaml.snakeyaml.Yaml#load 的相同字符串确实产生了预期的结果...... 【参考方案1】:

我应该检查 GitHub 问题...有人报告了 a similar problem。解决方案是使用“括号语法”,不幸的是barely documented,将键包裹在括号内:

myapp
  serviceUrls:
    '[https://example.org/test]': 'https://test.example.org/Endpoint'

【讨论】:

以上是关于springboot不同版本加载yaml中的配置问题的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 多环境部署

spring boot 配置多个yaml文件并根据env参数加载

SpringBoot—配置文件详解:Properties和YAML

SpringBoot2配置文件application.yaml

(超详解)SpringBoot初级部分-配置-03

SpringBoot -- 配置:配置文件加载顺序