apache storm-从config读入yaml列表

wgx48brx  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(459)

我正在编写一个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?
任何帮助都将不胜感激。

disbfnqx

disbfnqx1#

我建议使用jackson的yaml模块(https://github.com/fasterxml/jackson-dataformat-yaml); 这是像dropwizard这样的许多框架所做的。如果是这样,您可以像使用json一样使用数据绑定来构造POJO以进行配置访问:

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Config config = mapper.readValue(fileOrInputStream, Config.class);
int port = mapper.server.port; // or getters, or however your Config object is laid out
gab6jxml

gab6jxml2#

我不确定答案是什么,但我最终将snakeyaml版本更新到了1.14,现在我使用yaml.loadas()方法将yaml文件的内容直接加载到pojo中。从那里我可以得到我需要的东西。

相关问题