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中的配置问题的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 配置多个yaml文件并根据env参数加载
SpringBoot—配置文件详解:Properties和YAML