我想通过命令行动态初始化我的redis地址,并在使用bolt open
方法之前使用它:
public class RunMyTopology {
@Parameter(names = { "-topologyName"}, description = "Topology name.")
private static String TOP_NAME = "demo";
@Parameter(names = { "-redisAddr"}, description = "Redis host address.", validateWith = IPValidator.class)
public static String REDIS_ADDR = "172.16.3.142";
public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException {
new JCommander(new RunMyTopology(), args);
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new Spout(REDIS_ADDR), 1);
builder.setBolt("fixerBolt",new FixerBolt(REDIS_Addr),1).fieldsGrouping("spout", new Fields("busId"));
// And many other bolts need REDIS_ADDR
Config conf = new Config();
conf.put(Config.TOPOLOGY_WORKERS, 22);
StormSubmitter.submitTopology(TOP_NAME, new Conf, builder.createTopology());
}
}
现在我可以通过传递构造函数参数来实现它,但是如果我有很多 配置值像redis地址,这种方式看起来很难看。如何以其他方式通知更改的值?
答案 0 :(得分:0)
不幸的是,Apache Storm中没有属性的外部化。
但是您可以使用许多可用于此目的的库,例如Spring(占位符API)或Apache Commons Configuration(我个人将它与风暴一起使用,因为它非常轻量级,并且可以很好地完成这项工作)。
如果您打算使用Commons Configuration:
希望有所帮助。