Move RefreshEvent and Listener from consul/zk

This commit is contained in:
Spencer Gibb
2016-02-08 17:04:41 -07:00
parent fc44a48194
commit 42b21d8399
3 changed files with 73 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ import org.springframework.cloud.context.properties.ConfigurationPropertiesRebin
import org.springframework.cloud.context.restart.RestartEndpoint;
import org.springframework.cloud.context.scope.refresh.RefreshScope;
import org.springframework.cloud.endpoint.RefreshEndpoint;
import org.springframework.cloud.endpoint.event.RefreshEventListener;
import org.springframework.cloud.health.RefreshScopeHealthIndicator;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
@@ -117,6 +118,11 @@ public class RefreshEndpointAutoConfiguration {
return endpoint;
}
@Bean
public RefreshEventListener refreshEventListener(RefreshEndpoint refreshEndpoint) {
return new RefreshEventListener(refreshEndpoint);
}
}
private static class InfoEndpointRebinderConfiguration

View File

@@ -0,0 +1,28 @@
package org.springframework.cloud.endpoint.event;
import org.springframework.cloud.endpoint.RefreshEndpoint;
import org.springframework.context.ApplicationEvent;
/**
* Event that triggers a call to {@link RefreshEndpoint#refresh()}
* @author Spencer Gibb
*/
public class RefreshEvent extends ApplicationEvent {
private Object event;
private String eventDesc;
public RefreshEvent(Object source, Object event, String eventDesc) {
super(source);
this.event = event;
this.eventDesc = eventDesc;
}
public Object getEvent() {
return this.event;
}
public String getEventDesc() {
return this.eventDesc;
}
}

View File

@@ -0,0 +1,39 @@
package org.springframework.cloud.endpoint.event;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.cloud.endpoint.RefreshEndpoint;
import org.springframework.context.event.EventListener;
import lombok.extern.apachecommons.CommonsLog;
/**
* Calls {@link RefreshEndpoint#refresh()} when a {@link RefreshEvent} is received.
* Only responds to {@link RefreshEvent} after receiving an {@link ApplicationReadyEvent} as the RefreshEvent's might come to early in the application lifecycle.
* @author Spencer Gibb
*/
@CommonsLog
public class RefreshEventListener {
private RefreshEndpoint refresh;
private AtomicBoolean ready = new AtomicBoolean(false);
public RefreshEventListener(RefreshEndpoint refresh) {
this.refresh = refresh;
}
@EventListener
public void handle(ApplicationReadyEvent event) {
this.ready.compareAndSet(false, true);
}
@EventListener
public void handle(RefreshEvent event) {
if (this.ready.get()) { // don't handle events before app is ready
log.debug("Event received " + event.getEventDesc());
String[] keys = this.refresh.refresh();
log.info("Refresh keys changed: " + Arrays.asList(keys));
}
}
}