【发布时间】:2017-08-22 21:35:29
【问题描述】:
在我的数据框架层,我想从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.yml 或application.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 类来执行此操作。
YamlMapFactoryBean类中getObject方法的返回类型是Map<String, Object>,不是泛型类型,如Map<String, T>。
Spring boot doc刚才说了
Spring Framework 提供了两个方便的类,可用于加载 YAML 文档。 YamlPropertiesFactoryBean 将 YAML 作为 Properties 加载,YamlMapFactoryBean 将 YAML 作为 Map 加载。
但是没有详细的例子。
更新:
在 github 中,我创建了一个示例。 It's Here。
在此示例中,我想将 myconfig.yaml 加载到 theMapProperties 类中的 SamplePropertyLoadingTest 对象。 Spring Boot 版本是 1.5.1,所以我不能使用@ConfigurationProperties 的location 属性。
如何做到这一点?
【问题讨论】:
-
@niamingjian,请使用下面的链接,这将帮助您了解如何外部化配置。 docs.spring.io/spring-boot/docs/current/reference/html/…
-
您希望将此信息存储到 HashMap 中。你想把它作为一个键还是一个值。如果您希望它作为键,值是什么,如果您想将数据加载到 HashMap 值中,键是什么?
-
@Anthon 我添加了我预期的地图。
-
@niaomingjian 这就是你加载YAML时应该得到的,因为顶层是一个映射,所以不需要在任何地方存储它,只需加载它。
-
@Anthon 问题是如何加载它。我不知道。
标签: spring-boot yaml