gpt4 book ai didi

spring-boot - 在 Spring Boot Web 项目中将 yaml 文件加载到 Map(不是环境配置文件)的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 07:45:40 28 4
gpt4 key购买 nike

在我的数据框架层中,我想从 src/main/resources 读取 yaml 。文件名为mapconfigure.yaml 。它与业务数据相关,而不仅仅是环境配置数据。

其内容如下:

person1: 
name: aaa
addresses:
na: jiang
sb: su
person2:
name: bbb
addresses:
to: jiang
bit: su

我想将这些信息存储到 HashMap 中。

这是否意味着使用一些像@ConfigurationProperties这样的spring注释?具体如何实现?

此外,我无法更改文件名。这意味着我必须使用 mapconfigure.yaml作为文件名,而不是 application.ymlapplication.properties .

我的HashMap的结构如下:

HashMap<String, Setting>

@Data
public class Setting{
private String name;
private HashMap<String, String> addresses
}

我的预期的HashMap如下:

{person1={name=aaa, addresses={na=jiang, sb=su}}, person2={name=bbb, addresses={to=jiang, bit=su}}}

我不确定是否可以使用 YamlMapFactoryBean类来执行此操作。

getObject的返回类型YamlMapFactoryBean中的方法类(class)是 Map<String, Object> ,不是泛型类型,例如 Map<String, T> .

Spring boot doc刚刚说了

Spring Framework provides two convenient classes that can be used to load YAML documents. The YamlPropertiesFactoryBean will load YAML as Properties and the YamlMapFactoryBean will load YAML as a Map.

但是没有详细的例子。

更新:

在 github 中,我创建了一个示例。 It's Here 。在此示例中,我想加载 myconfig.yamltheMapProperties SamplePropertyLoadingTest 中的对象类(class)。 Spring boot版本是1.5.1,所以我不能使用location @ConfigurationProperties 的属性。如何做到这一点?

最佳答案

您确实可以使用@ConfigurationProperties 来实现这一点。

从 Spring Boot 1.5.x 开始(缺少 @ConfigurationProperies 位置属性):

new SpringApplicationBuilder(Application.class)
.properties("spring.config.name=application,your-filename")
.run(args);

@Component
@ConfigurationProperties
public class TheProperties {
private Map<String, Person> people;
// getters and setters are omitted for brevity
}

在 Spring Boot 1.3.x 中:

@Component
@ConfigurationProperties(locations = "classpath:your-filename.yml")
public class TheProperties {
private Map<String, Person> people;
// getters and setters are omitted for brevity
}

上述示例的 Person 类如下所示:

public class Person {
private String name;
private Map<String, String> addresses;
// getters and setters are omitted for brevity
}

我已经使用以下文件测试了代码:your-filename.yml定义在src/main/resources中,内容:

people:
person1:
name: "aaa"
addresses:
na: "jiang"
sb: "su"
person2:
name: "bbb"
addresses:
to: "jiang"
bit: "su"

如果您需要任何进一步的帮助,请告诉我。

关于spring-boot - 在 Spring Boot Web 项目中将 yaml 文件加载到 Map(不是环境配置文件)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43092808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com