想知道是否有人可以帮助解决这种情况-
我有一个使用 Netflix 的 Archaius 属性配置的类(处理器),它是 ElasticSearch Java BulkProcessor 的简单包装器。我还将一些回调与属性挂钩,因此如果值更改,BulkProcessor 属性也应该得到更新。我的问题是,BulkProcessor 是不可变的,更新属性的唯一方法是关闭一个实例并创建一个新实例。在调用回调时,我不想从我的类中调用任何方法 - 有没有办法用 Java 做到这一点?
编辑:虽然我可以更新配置文件并重新启动服务,但我试图避免这种情况。
我目前的想法是使用 AtomicBoolean 来指示类是否正在更新-如果为真,则阻止对类的访问,这似乎不是很有效-
// Processor.class
class Processor {
public Processor() {
this.bulkProcessor = /** BulkProcessor setup **/
this.updating = new AtomicBoolean(false);
}
public void add(Object payload) {
while (updating.get()) {
// Do something here to prevent access when updating
}
bulkProcessor.add(payload);
}
/** The callback method used by Dynamic*Property **/
public void update() {
updating.set(true);
bulkProcessor.awaitClose(30L, TimeUnit.SECONDS);
bulkProcessor = /** BulkProcessor setup **/
updating.set(false);
}
}
非常感谢任何帮助或指示!