我有一个像这样的 yaml 文件设置:
system:
locators:
- first.com
- 103
- 105
- second.com
- 105
我想将其加载为@autowired
配置看起来像这样:
@Autowired
List<Locator> locators;
我认为 Locator 类看起来像这样:
class Locator {
String name;
List<String> ports;
}
但我不知道如何将这一切放在一起。任何帮助表示赞赏!
首先,我相信您的 yaml 文件结构无效。在您的 Locator 类中,您已经为字段指定了名称 - 您应该在 yaml 文件中执行相同的操作。最后它应该看起来像这样:
system:
locators:
- name: first.com
ports:
- 103
- 105
- name: second.com
ports:
- 105
其次,您可以利用 Spring Boot 相当先进的属性到 bean 自动映射。与每个 Spring Boot 应用程序一样,您需要使用 @SpringBootApplication 注释您的主类。然后,您可以创建一个表示属性结构的类:
@Configuration
@ConfigurationProperties(prefix = "system")
public class SystemProperties {
private List<Locator> locators;
public List<Locator> getLocators() {
return locators;
}
public void setLocators(List<Locator> locators) {
this.locators = locators;
}
public static class Locator {
private String name;
private List<String> ports;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getPorts() {
return ports;
}
public void setPorts(List<String> ports) {
this.ports = ports;
}
}
}
请注意 @ConfigurationProperties 注释,它定义了该类映射配置的根前缀。它当然可以是 yaml 属性树中的任何节点,不一定是您的情况中的主级别。
为了进一步阅读,我建议这个博客文章 https://spring.io/blog/2013/10/30/empowering-your-apps-with-spring-boot-s-property-support和官方文档 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html因为在属性 bean 映射方面有更强大的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)