java 多线程读yaml_关于java:阅读yaml配置

本文介绍如何在Java Spring Boot应用中从.yml文件动态读取配置到Map对象,包括解决@Value和@ConfigurationProperties的使用问题,以及处理嵌套Map的案例。
摘要由CSDN通过智能技术生成

我一直试图将这个问题包围好几个小时,但是我做错了也没有多大意义。我试图用.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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值