想知道是否有人可以帮助解决这个问题 -
我有一个使用Netflix的Archaius属性配置的类(处理器),它是ElasticSearch Java BulkProcessor的简单包装器。我还将一些回调连接到属性,因此如果值发生更改,BulkProcessor属性也应该更新。我的问题是,BulkProcessor是不可变的,更新属性的唯一方法是关闭一个实例并创建一个新实例。在调用回调时,我不想在我的类中调用任何方法 - 有没有办法用Java做到这一点?
编辑:虽然我可以更新配置文件并重新启动服务,但我试图避免这种情况。
我目前的想法是使用AtomicBoolean来指示类是否正在更新 - 如果为true,则阻止对类的访问,这看起来效率不高 -
// 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);
}
}
非常感谢任何帮助或指示!