概述
我一直试图将这个问题包围好几个小时,但是我做错了也没有多大意义。我试图用.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 present;
//private Map present = new HashMap();
}
我试着查看其他SO帖子,我觉得我理解它,但我的Spring Boot(v1.5.8)应用程序没有看到这个值。它一直为我抛出一个错误,或者map对象为null(或者没有被填充)。
我知道我可以从这个.yml文件读取值,因为如果我尝试使用下面的代码片段获取单个值,它可以工作:
@Data
@Value("${present.now}")
private String status; // String value"LOCAL TESTING"
以下是我尝试过的其他链接:
Spring Boot yaml配置字符串列表
如何将yml文件转换为java pojo
我错过了一些明显的东西吗谢谢!
所以我想出来了(对于那些后来遇到这个问题的人):
不需要@Value,并且不需要@ConfigurationProperties中的前缀参数。
然后你需要为你想要的字段设置一个getter方法 - 我认为Lombok库已经自动生成了这些但是我错了(可能需要稍后阅读更多相关信息 - @Setter和@Data将无法正常工作)。
所以看起来应该是这样的:
@Component
@EnableConfigurationProperties
@ConfigurationProperties
public class stat {
private Map present = new HashMap();
public Map 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> parent = new HashMap>();
public Map> getParent() {
return parent;
}
}
另一个需要注意的关键是,您从中获取值的字段必须与变量名称匹配 - 如果您使用前缀可能无关紧要,但它仍然不适用于我。 希望这可以帮助。
您可以尝试创建一个POJO来表示您尝试读取的yml结构。
例如:
@Configuration
@ConfigurationProperties(prefix ="present")
@Data
public class Present {
private String now;
private String later;
}
感谢您的回复,但我正在尝试从此创建一个地图对象。 在原始问题中我没有提到的一点是我不知道孩子们(除了没有重复的键),说,我宁愿创建一个可以动态创建地图对象而不是硬编码这些值的POJO。
最后
以上就是伶俐小鸭子为你收集整理的java 多线程读yaml_关于java:阅读yaml配置的全部内容,希望文章能够帮你解决java 多线程读yaml_关于java:阅读yaml配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复