Java 如何在SpringBoot2.3中检索yaml配置文件的一部分?
我有一个外部Java 如何在SpringBoot2.3中检索yaml配置文件的一部分?,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,我有一个外部应用程序.yaml配置文件,其属性我事先不知道。例如: prop0: prop1: 1234 prop2: prop3: "Hello" prop4: [foo, bar, foo, bar, foo, bar] prop5: - val1 - val2 - val3 prop6: prop7: 123 prop8: 321 我的任务是以yaml格式从prop0检索所有内容: pro
应用程序.yaml
配置文件,其属性我事先不知道。例如:
prop0:
prop1: 1234
prop2:
prop3: "Hello"
prop4: [foo, bar, foo, bar, foo, bar]
prop5:
- val1
- val2
- val3
prop6:
prop7: 123
prop8: 321
我的任务是以yaml格式从prop0
检索所有内容:
prop1: 1234
prop2:
prop3: "Hello"
prop4: [foo, bar, foo, bar, foo, bar]
prop5:
- val1
- val2
- val3
我需要将其检索为字符串、InputStream或Map对象,其中每个值表示基元类型、Map或数组。或列表,即
Map<String, Object> prop0Value = ...;
String prop3Value = prop0Value.get("prop2").get("prop3");
List<String> prop5Value = prop0Value.get("prop2").get("prop5");
但该格式不是正确的yaml格式,大多数工具无法解析该格式
更新:
我正在考虑使用@ConfigurationProperties
注释来解析属性。比如:
@Configuration
@ConfigurationProperties(prefix = "prop0")
public class MyConfigProperties {
private Map<String, String> prop2;
public Map<String, String> getProp2() {
return prop2;
}
public void setProp2(Map<String, String> prop2) {
this.prop2 = prop2;
}
}
@配置
@配置属性(前缀=“prop0”)
公共类MyConfigProperty{
私人地图2;
公共地图getProp2(){
返回prop2;
}
公共无效集合prop2(地图prop2){
this.prop2=prop2;
}
}
但它有两个缺点:
prop2
下的属性,但我需要prop0
下的所有属性。正如我所说,我不知道将提前使用的财产名称yaml
格式的第三方库无法接受的列表请发布您的configurationproperties classI没有configurationproperties。配置属性类不允许检索所有第二级属性。只有三级属性。ConfigurationProperties需要前缀,用于选择所选前缀的第二级属性,但要映射它们,您需要知道它们的名称(我事先不知道)。也就是说,可以使用
map prop2映射三级属性
但我知道它使用Spring yaml格式(与我描述的不同),它只映射prop2
下的属性,而不是prop0
属性。我已经更新了我的问题,将ConfigurationProperties
类包括在内
@Configuration
@ConfigurationProperties(prefix = "prop0")
public class MyConfigProperties {
private Map<String, String> prop2;
public Map<String, String> getProp2() {
return prop2;
}
public void setProp2(Map<String, String> prop2) {
this.prop2 = prop2;
}
}