diff --git a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ConfigWatcher.java b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ConfigWatcher.java index f9411ee6..c1539a22 100644 --- a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ConfigWatcher.java +++ b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ConfigWatcher.java @@ -111,11 +111,20 @@ public void close() { public void childEvent(CuratorFramework client, TreeCacheEvent event) throws Exception { TreeCacheEvent.Type eventType = event.getType(); - if (eventType == NODE_ADDED || eventType == NODE_REMOVED - || eventType == NODE_UPDATED) { - this.publisher - .publishEvent(new RefreshEvent(this, event, getEventDesc(event))); + if (eventType != NODE_ADDED && eventType != NODE_REMOVED + && eventType != NODE_UPDATED) { + return; } + + // ignore event whose modify time is out of date + String path = event.getData().getPath(); + long validTime = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(1); + if (eventType == NODE_ADDED + && event.getData().getStat().getMtime() < validTime) { + return; + } + + this.publisher.publishEvent(new RefreshEvent(this, event, getEventDesc(event))); } public String getEventDesc(TreeCacheEvent event) {