[英]Reading yaml config
数小时以来,我一直在努力思考,但是我做错了事没有多大意义。 我正在尝试从.yml文件在Java中创建Map对象。 之所以要使用地图,是因为我不知道“呈现”下将出现多少个孩子,所以我宁愿有一种动态的方式来创建地图对象。
以下是我的.yml文件。 我想要“存在”下的键值对:
present:
now: LOCAL TESTING
later: testing
下面是我的配置类(所有注释掉的都是我尝试过的内容-以不同的组合):
//@Data
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "present")
//@ConfigurationProperties
public class stat {
//@Getter
//@Data
@Value("${present}")
private Map<String, String> present;
//private Map<String, String> present = new HashMap<String, String>();
}
我尝试查看其他SO帖子,我觉得自己理解了,但是我的Spring Boot(v1.5.8)应用程序没有看到该值。 它一直为我抛出错误,或者地图对象为null(或未填充)。
我知道我可以从此.yml文件中读取值,因为如果我尝试使用下面的代码段获取单个值,则它可以正常工作:
@Data
@Value("${present.now}")
private String status; // String value "LOCAL TESTING"
这是我尝试过的其他链接:
我是否缺少明显的东西? 谢谢!
您可以尝试创建一个POJO来表示您要读取的yml结构。
例如:
@Configuration
@ConfigurationProperties(prefix = "present")
@Data
public class Present {
private String now;
private String later;
}
所以我弄清楚了(对于以后有这个问题的人):
不需要@Value,也不需要@ConfigurationProperties中的前缀param。
然后,您需要为所需的字段提供一种getter方法-我认为Lombok库已经自动生成了这些字段,但是我错了(可能以后需要阅读更多内容-@Setter和@Data无法正常工作)。
所以它应该看起来像这样:
@Component
@EnableConfigurationProperties
@ConfigurationProperties
public class stat {
private Map<String, String[]> present = new HashMap<String, String[]>();
public Map<String, String[]> getPresent() {
return present;
}
}
现在,让我们给出一个更复杂的示例(嵌套地图)。 假设我的.yml文件如下所示:
parent:
present:
foo: dey, tok
bar: ar, jerbs
later:
foo: day, dok
mar: r, darbs
POJO如下所示:
@Component
@EnableConfigurationProperties
@ConfigurationProperties
public class stat {
private Map<String, Map<String, String[]>> parent = new HashMap<String, Map<String, String[]>>();
public Map<String, Map<String, String[]>> getParent() {
return parent;
}
}
另一个要注意的关键是,您要从中获取值的字段必须与变量名匹配-如果使用前缀可能并不重要,但对我而言仍然无效。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.