Change key value if prefix changes

Some weird looking test failures led me to track this down.
If the user changes the prefix for metric names, he probably wanted
to change the keys as welll (otherwise 2 repositories can use the
same key, which is why the test was failing for me). We can do that
in an afterPropertiesSet().
This commit is contained in:
Dave Syer 2014-10-02 16:36:07 +01:00
parent a702ff5c36
commit d724c9062b
2 changed files with 19 additions and 4 deletions

View File

@ -22,6 +22,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.actuate.metrics.Metric;
import org.springframework.boot.actuate.metrics.repository.MetricRepository;
import org.springframework.boot.actuate.metrics.writer.Delta;
@ -40,13 +41,15 @@ import org.springframework.util.Assert;
*
* @author Dave Syer
*/
public class RedisMetricRepository implements MetricRepository {
public class RedisMetricRepository implements MetricRepository, InitializingBean {
private static final String DEFAULT_METRICS_PREFIX = "spring.metrics.";
private static final String DEFAULT_KEY = "keys." + DEFAULT_METRICS_PREFIX;
private String prefix = DEFAULT_METRICS_PREFIX;
private String key = "keys." + DEFAULT_METRICS_PREFIX;
private String key = DEFAULT_KEY;
private BoundZSetOperations<String, String> zSetOperations;
@ -57,7 +60,19 @@ public class RedisMetricRepository implements MetricRepository {
this.redisOperations = RedisUtils.stringTemplate(redisConnectionFactory);
this.zSetOperations = this.redisOperations.boundZSetOps(this.key);
}
@Override
public void afterPropertiesSet() {
if (!DEFAULT_METRICS_PREFIX.equals(this.prefix)) {
if (DEFAULT_KEY.equals(this.key)) {
this.key = "keys." + this.prefix;
}
}
if (!DEFAULT_KEY.equals(this.key)) {
this.zSetOperations = this.redisOperations.boundZSetOps(this.key);
}
}
/**
* The prefix for all metrics keys.
* @param prefix the prefix to set for all metrics keys
@ -78,7 +93,6 @@ public class RedisMetricRepository implements MetricRepository {
*/
public void setKey(String key) {
this.key = key;
this.zSetOperations = this.redisOperations.boundZSetOps(this.key);
}
@Override

View File

@ -44,6 +44,7 @@ public class RedisMetricRepositoryTests {
this.repository = new RedisMetricRepository(this.redis.getResource());
this.prefix = "spring.test." + System.currentTimeMillis();
this.repository.setPrefix(this.prefix);
this.repository.afterPropertiesSet();
}
@After