Browse Source

Move RefreshEvent and Listener from consul/zk

pull/94/head
Spencer Gibb 9 years ago
parent
commit
42b21d8399
  1. 6
      spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java
  2. 28
      spring-cloud-context/src/main/java/org/springframework/cloud/endpoint/event/RefreshEvent.java
  3. 39
      spring-cloud-context/src/main/java/org/springframework/cloud/endpoint/event/RefreshEventListener.java

6
spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java

@ -38,6 +38,7 @@ import org.springframework.cloud.context.properties.ConfigurationPropertiesRebin @@ -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 { @@ -117,6 +118,11 @@ public class RefreshEndpointAutoConfiguration {
return endpoint;
}
@Bean
public RefreshEventListener refreshEventListener(RefreshEndpoint refreshEndpoint) {
return new RefreshEventListener(refreshEndpoint);
}
}
private static class InfoEndpointRebinderConfiguration

28
spring-cloud-context/src/main/java/org/springframework/cloud/endpoint/event/RefreshEvent.java

@ -0,0 +1,28 @@ @@ -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;
}
}

39
spring-cloud-context/src/main/java/org/springframework/cloud/endpoint/event/RefreshEventListener.java

@ -0,0 +1,39 @@ @@ -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));
}
}
}
Loading…
Cancel
Save