WildFly 28中Micrometer @Counted注解未被识别,编程方式却正常?
我正在将应用升级至WildFly 28,其中MicroProfile Metrics已被Micrometer替代。我尝试在方法上添加Micrometer的@Counted注解,写法和之前用MicroProfile Metrics时很像:
@Counted(value = "xxxxx_api_ping", description = "Hvor mange ping-kall gjennom api.") @GET public Response ping() { ... }
但这个注解似乎没被识别;不过通过编程方式调用MeterRegistry却能正常工作:
@Inject private MeterRegistry registry; @GET public Response ping() { registry.counter("dummy").increment(); ... }
@Counted注解按理说应该可行,对吧?
解决步骤
确认@Counted的包路径正确
确保你用的是Micrometer的注解:io.micrometer.core.annotation.Counted,不要和MicroProfile Metrics的jakarta.metrics.annotation.Counted混淆,后者在WildFly 28中已被替换。确保依赖配置正确
在项目pom.xml中引入Micrometer核心依赖及Jakarta适配包(适配WildFly 28的Jakarta EE环境):<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.12.0</version> <!-- 选择与WildFly 28兼容的版本 --> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-jakarta</artifactId> <version>1.12.0</version> </dependency>确保类被CDI托管
Micrometer的注解依赖CDI拦截器实现,所以你的JAX-RS资源类需要添加CDI作用域注解,比如@RequestScoped或@ApplicationScoped:@RequestScoped @Path("/ping") public class PingResource { @Counted(value = "xxxxx_api_ping", description = "Hvor mange ping-kall gjennom api.") @GET public Response ping() { ... } }验证WildFly中Micrometer扩展已启用
检查WildFly是否开启了Micrometer扩展,执行以下命令确认:./bin/jboss-cli.sh -c "extension ls" | grep micrometer如果未启用,执行命令添加扩展:
./bin/jboss-cli.sh -c "extension add --name=org.wildfly.extension.micrometer"检查注解属性配置
若需要统计异常调用次数,可添加recordFailures = true(默认仅统计成功调用),基础计数场景默认配置即可,也可显式指定:@Counted(value = "xxxxx_api_ping", description = "Hvor mange ping-kall gjennom api.", recordFailures = true)
完成以上步骤后,@Counted注解即可正常生效,自动统计方法调用次数。
内容的提问来源于stack exchange,提问作者thoredge

