diff --git a/spring-cloud-consul-config/pom.xml b/spring-cloud-consul-config/pom.xml index 4be8dea6..e53cf27c 100644 --- a/spring-cloud-consul-config/pom.xml +++ b/spring-cloud-consul-config/pom.xml @@ -47,12 +47,6 @@ spring-cloud-context true - - org.projectlombok - lombok - - true - org.springframework.retry spring-retry diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConfigWatch.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConfigWatch.java index 48104626..202e6c77 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConfigWatch.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConfigWatch.java @@ -16,37 +16,37 @@ package org.springframework.cloud.consul.config; -import java.io.Closeable; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -import javax.annotation.PostConstruct; - -import io.micrometer.core.annotation.Timed; -import org.springframework.cloud.endpoint.event.RefreshEvent; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.ApplicationEventPublisherAware; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.StringUtils; - import com.ecwid.consul.v1.ConsulClient; import com.ecwid.consul.v1.QueryParams; import com.ecwid.consul.v1.Response; import com.ecwid.consul.v1.kv.model.GetValue; +import io.micrometer.core.annotation.Timed; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.endpoint.event.RefreshEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.core.style.ToStringCreator; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.util.ReflectionUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.PostConstruct; +import java.io.Closeable; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import static org.springframework.cloud.consul.config.ConsulConfigProperties.Format.FILES; -import lombok.Data; -import lombok.extern.apachecommons.CommonsLog; - /** * @author Spencer Gibb */ -@CommonsLog public class ConfigWatch implements Closeable, ApplicationEventPublisherAware { + private static final Log log = LogFactory.getLog(ConfigWatch.class); + private final ConsulConfigProperties properties; private final ConsulClient consul; private LinkedHashMap consulIndexes; @@ -56,7 +56,7 @@ public class ConfigWatch implements Closeable, ApplicationEventPublisherAware { @Deprecated public ConfigWatch(ConsulConfigProperties properties, List contexts, ConsulClient consul) { - this(properties, consul, new LinkedHashMap()); + this(properties, consul, new LinkedHashMap<>()); } public ConfigWatch(ConsulConfigProperties properties, ConsulClient consul, LinkedHashMap initialIndexes) { @@ -92,6 +92,8 @@ public class ConfigWatch implements Closeable, ApplicationEventPublisherAware { currentIndex = -1L; } + log.trace("watching consul for context '"+context+"' with index "+ currentIndex); + // use the consul ACL token if found String aclToken = properties.getAclToken(); if (StringUtils.isEmpty(aclToken)) { @@ -110,11 +112,18 @@ public class ConfigWatch implements Closeable, ApplicationEventPublisherAware { if (newIndex != null && !newIndex.equals(currentIndex)) { // don't publish the same index again, don't publish the first time (-1) so index can be primed if (!this.consulIndexes.containsValue(newIndex) && !currentIndex.equals(-1L)) { + log.trace("Context "+context + " has new index " + newIndex); RefreshEventData data = new RefreshEventData(context, currentIndex, newIndex); this.publisher.publishEvent(new RefreshEvent(this, data, data.toString())); + } else if (log.isTraceEnabled()) { + log.trace("Event for index already published for context "+context); } this.consulIndexes.put(context, newIndex); + } else if (log.isTraceEnabled()) { + log.trace("Same index for context "+context); } + } else if (log.isTraceEnabled()) { + log.trace("No value for context "+context); } } catch (Exception e) { @@ -139,10 +148,51 @@ public class ConfigWatch implements Closeable, ApplicationEventPublisherAware { this.running.compareAndSet(true, false); } - @Data static class RefreshEventData { private final String context; private final Long prevIndex; private final Long newIndex; + + public RefreshEventData(String context, Long prevIndex, Long newIndex) { + this.context = context; + this.prevIndex = prevIndex; + this.newIndex = newIndex; + } + + public String getContext() { + return this.context; + } + + public Long getPrevIndex() { + return this.prevIndex; + } + + public Long getNewIndex() { + return this.newIndex; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RefreshEventData that = (RefreshEventData) o; + return Objects.equals(context, that.context) && + Objects.equals(prevIndex, that.prevIndex) && + Objects.equals(newIndex, that.newIndex); + } + + @Override + public int hashCode() { + return Objects.hash(context, prevIndex, newIndex); + } + + @Override + public String toString() { + return new ToStringCreator(this) + .append("context", context) + .append("prevIndex", prevIndex) + .append("newIndex", newIndex) + .toString(); + } } } diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigProperties.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigProperties.java index e8a14dae..d1f21ae7 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigProperties.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigProperties.java @@ -16,21 +16,19 @@ package org.springframework.cloud.consul.config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.style.ToStringCreator; +import org.springframework.validation.annotation.Validated; + import javax.annotation.PostConstruct; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.validation.annotation.Validated; - -import lombok.Data; - /** * @author Spencer Gibb */ @ConfigurationProperties("spring.cloud.consul.config") -@Data @Validated public class ConsulConfigProperties { private boolean enabled = true; @@ -68,6 +66,9 @@ public class ConsulConfigProperties { */ private String name; + public ConsulConfigProperties() { + } + @PostConstruct public void init() { if (this.format == Format.FILES) { @@ -75,7 +76,102 @@ public class ConsulConfigProperties { } } - @Data + public boolean isEnabled() { + return this.enabled; + } + + public String getPrefix() { + return this.prefix; + } + + public @NotEmpty String getDefaultContext() { + return this.defaultContext; + } + + public @NotEmpty String getProfileSeparator() { + return this.profileSeparator; + } + + public @NotNull Format getFormat() { + return this.format; + } + + public @NotEmpty String getDataKey() { + return this.dataKey; + } + + public String getAclToken() { + return this.aclToken; + } + + public Watch getWatch() { + return this.watch; + } + + public boolean isFailFast() { + return this.failFast; + } + + public String getName() { + return this.name; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public void setDefaultContext(@NotEmpty String defaultContext) { + this.defaultContext = defaultContext; + } + + public void setProfileSeparator(@NotEmpty String profileSeparator) { + this.profileSeparator = profileSeparator; + } + + public void setFormat(@NotNull Format format) { + this.format = format; + } + + public void setDataKey(@NotEmpty String dataKey) { + this.dataKey = dataKey; + } + + public void setAclToken(String aclToken) { + this.aclToken = aclToken; + } + + public void setWatch(Watch watch) { + this.watch = watch; + } + + public void setFailFast(boolean failFast) { + this.failFast = failFast; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return new ToStringCreator(this) + .append("enabled", enabled) + .append("prefix", prefix) + .append("defaultContext", defaultContext) + .append("profileSeparator", profileSeparator) + .append("format", format) + .append("dataKey", dataKey) + .append("aclToken", aclToken) + .append("watch", watch) + .append("failFast", failFast) + .append("name", name) + .toString(); + } + public static class Watch { /** The number of seconds to wait (or block) for watch query, defaults to 55. * Needs to be less than default ConsulClient (defaults to 60). To increase ConsulClient @@ -88,6 +184,42 @@ public class ConsulConfigProperties { /** The value of the fixed delay for the watch in millis. Defaults to 1000. */ private int delay = 1000; + + public Watch() { + } + + public int getWaitTime() { + return this.waitTime; + } + + public boolean isEnabled() { + return this.enabled; + } + + public int getDelay() { + return this.delay; + } + + public void setWaitTime(int waitTime) { + this.waitTime = waitTime; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void setDelay(int delay) { + this.delay = delay; + } + + @Override + public String toString() { + return new ToStringCreator(this) + .append("waitTime", waitTime) + .append("enabled", enabled) + .append("delay", delay) + .toString(); + } } /** diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java index bdf1b087..d9848de5 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java @@ -23,6 +23,12 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import com.ecwid.consul.v1.ConsulClient; +import com.ecwid.consul.v1.Response; +import com.ecwid.consul.v1.kv.model.GetValue; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.annotation.Order; import org.springframework.core.env.CompositePropertySource; @@ -33,21 +39,15 @@ import org.springframework.retry.annotation.Retryable; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; -import com.ecwid.consul.v1.ConsulClient; -import com.ecwid.consul.v1.Response; -import com.ecwid.consul.v1.kv.model.GetValue; - import static org.springframework.cloud.consul.config.ConsulConfigProperties.Format.FILES; -import lombok.extern.apachecommons.CommonsLog; - /** * @author Spencer Gibb */ @Order(0) -@CommonsLog public class ConsulPropertySourceLocator implements PropertySourceLocator { + private static final Log log = LogFactory.getLog(ConsulPropertySourceLocator.class); private final ConsulClient consul; private final ConsulConfigProperties properties; diff --git a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java index e834f8e0..e58a232e 100644 --- a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java +++ b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/configclient/DiscoveryClientConfigServiceAutoConfigurationTests.java @@ -76,7 +76,7 @@ public class DiscoveryClientConfigServiceAutoConfigurationTests { verify(client, times(2)).getInstances("configserver"); ConfigClientProperties locator = this.context .getBean(ConfigClientProperties.class); - assertEquals("http://foo:7001/", locator.getRawUri()); + assertEquals("http://foo:7001/", locator.getUri()[0]); } private void setup(String... env) {