我正在编写一个apachestorm拓扑,它接受命令行上的一个配置文件。配置文件是yaml,如下所示
# Ports
ports:
- 9998
- 9997
- 9996
我使用snakeyaml和以下代码将配置文件加载到storm config中,resource设置为配置yaml文件路径的字符串:
Config conf = new Config();
Yaml yaml = new Yaml()
Map rs = (Map) yaml.load(new InputStreamReader(new FileInputStream(resource)));
conf.putAll(rs);
我已经验证了config对象现在包含端口列表。如果我打印“端口”的值,它看起来是下面的“[9998,9997,9996]”。
我的问题是如何将其放入数组、arraylist或任何可以在java中使用的数据结构中?我一直在使用backtype.storm.utils.utils类,它有一个helper方法get,但它只在我有一个值而不是一个值列表时才起作用。
我试着这样称呼它:
String[] ports = Utils.get(conf, "mimes", null);
但是,我有一个例外。我也尝试过:
String ports = Utils.get(conf, "mimes", null);
检查是否可以得到整个字符串,这也有一个强制转换异常。我不确定配置对象将此列表存储为什么。一张Map?
任何帮助都将不胜感激。
2条答案
按热度按时间disbfnqx1#
我建议使用jackson的yaml模块(https://github.com/fasterxml/jackson-dataformat-yaml); 这是像dropwizard这样的许多框架所做的。如果是这样,您可以像使用json一样使用数据绑定来构造POJO以进行配置访问:
gab6jxml2#
我不确定答案是什么,但我最终将snakeyaml版本更新到了1.14,现在我使用yaml.loadas()方法将yaml文件的内容直接加载到pojo中。从那里我可以得到我需要的东西。