在我的数据框架层中,我想从中读取一个yaml src/main/resources.文件名是mapconfigure.yaml.它与业务数据相关联,而不仅仅与环境配置数据相关联.
其内容如下:
person1:
name: aaa
addresses:
na: jiang
sb: su
person2:
name: bbb
addresses:
to: jiang
bit: su
Run Code Online (Sandbox Code Playgroud)
我想将这些信息存储到HashMap中.
这是否意味着使用一些弹簧注释@ConfigurationProperties?如何在细节上实现这一目标?
另外,我无法更改文件名.这意味着我必须使用mapconfigure.yaml文件名,而不是application.yml或application.properties.
我的HashMap 的结构如下:
HashMap<String, Setting>
@Data
public class Setting{
private String name;
private HashMap<String, String> addresses
}
Run Code Online (Sandbox Code Playgroud)
我预期的HashMap如下:
{person1={name=aaa, addresses={na=jiang, sb=su}}, person2={name=bbb, addresses={to=jiang, bit=su}}}
Run Code Online (Sandbox Code Playgroud)
我不确定我是否可以用YamlMapFactoryBean课来做这件事.
在的返回类型getObject的方法YamlMapFactoryBean类Map<String, Object>,而不是一个泛型类型,喜欢Map<String, T>.
Spring boot doc刚刚说过
Spring Framework提供了两个方便的类,可用于加载YAML文档.YamlPropertiesFactoryBean将YAML作为Properties加载,YamlMapFactoryBean将YAML作为Map加载.
但是没有一个详细的例子.
更新:
在github中,我创建了一个示例.它就在这里.在这个示例中,我想在类中加载myconfig.yaml到theMapProperties对象SamplePropertyLoadingTest.Spring启动版本是1.5.1,所以我不能使用location属性@ConfigurationProperties.这该怎么做?
您确实可以使用@ConfigurationProperties实现此目的.
从Spring Boot 1.5.x开始(缺少@ConfigurationProperies位置attr.):
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
}
Run Code Online (Sandbox Code Playgroud)
在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
}
Run Code Online (Sandbox Code Playgroud)
上面示例的Person类如下所示:
public class Person {
private String name;
private Map<String, String> addresses;
// getters and setters are omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
我用以下文件测试了代码:在src/main/resources中定义的your-filename.yml,内容:
people:
person1:
name: "aaa"
addresses:
na: "jiang"
sb: "su"
person2:
name: "bbb"
addresses:
to: "jiang"
bit: "su"
Run Code Online (Sandbox Code Playgroud)
如果您需要任何进一步的帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
14869 次 |
| 最近记录: |