我们正在探索 Spring Boot 1.5 中的 Micrometer 指标收集库。
Micrometer 在Tag界面中提供了一个静态方法来为指标创建标签。
public interface Tag {
String getKey();
String getValue();
static Tag of(String key, String value) {
return new ImmutableTag(key, value);
}
}
ImmutableTag 的实现如下:
public class ImmutableTag implements Tag {
private String key;
private String value;
public ImmutableTag(String key, String value) {
requireNonNull(key);
requireNonNull(value);
this.key = key;
this.value = value;
}
...other methods...
}
现在,我们正在以编程方式收集一些标签,最终可能会得到一个空标签(由于 会引发异常requireNonNull())。但是在遇到空值时,我们可以用默认字符串(例如“未知”)替换标记值。
处理这个问题的最佳方法是什么?
我想到了以下几点:
Try / Catch:将所有此类语句括在一个try/catch
块中。我知道这可能很昂贵且难以维护。
在我们的末尾处理 null: Check for any null tag being passed
,并将其替换为默认字符串。但是,我们会有很多这样的语句,并且希望有一些默认情况下会发生这种情况的配置。
Wrapper接口:创建一个TagWrapper interface
,用默认值替换null,调用Tag.of()
方法。现在对我来说似乎是最好的选择,但是,当不再需要它时(也许稍后会在库中引入这样的方法),摆脱包装器将包括很多更改。
Spring 中是否有一些配置允许我在不创建包装器的情况下预先处理第三方库方法?
侃侃无极
暮色呼如
相关分类