如果正在更新,则阻止访问对象

时间:2016-09-17 12:48:13

标签: java elasticsearch netflix-archaius

想知道是否有人可以帮助解决这个问题 -

我有一个使用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);
    }
}

非常感谢任何帮助或指示!

0 个答案:

没有答案