@TImed用extraTags和@PathVariable

时间:2019-05-01 06:36:34

标签: java spring annotations micrometer spring-micrometer

我有一个带有这样注释的方法:

@Timed(value="timed", extraTags={"account", Account.getById(@PathVariable("id")}
public Info getInfo(@PathVariable("id") String id) {
    return Info.getById(id);
}

以上当然不起作用。希望您能看到我正在尝试做的事情。将帐户标记设置为给定路径上ID的Account.getById()返回的值的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

不能不能以您期望的方式将值传递给@Timed或与此相关的任何其他注释。传递给任何批注的值必须是一个编译时间常数。

编译时间常数类似于:

private static final String tag = "account";

Account.getById()返回的值不是编译时间常数,因此不能被注释接受。

答案 1 :(得分:0)

我认为您将无法使用@Timed批注来完成您正在做的事情,但是您可以手动为该方法计时并执行您想做的事情。这是一个示例:

.
.
.
@Autowired MeterRegistry meterRegistry;
.
.
.
public Info getInfo(@PathVariable("id") String id) {
    final Sample sample = Timer.start(meterRegistry);

    final Info info = Info.getById(id);

    sample.stop(Timer.builder("timed")
                     .tag("account", Account.getById(id)
                     .register(meterRegistry));
    return info;
}