繁体   English   中英

读取yaml配置

[英]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"

这是我尝试过的其他链接:

Spring Boot Yaml配置以获取字符串列表

如何将yml文件转换为java pojo

我是否缺少明显的东西? 谢谢!

您可以尝试创建一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM