Move RefreshEvent and Listener from consul/zk
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user