如何在Spring Boot 3.2.x中设置management.metrics.web.server.request.autotime.enabled为false?
Spring Boot 3.x 禁用Web请求自动计时(替代弃用的
management.metrics.web.server.request.autotime.enabled) 为什么要在ObservationRegistry层面操作
Spring Boot 3.x把Web请求自动计时的逻辑从旧的Micrometer Metrics模块,整合到了全新的Observation观测体系里。原来的autotime.enabled配置是旧版Metrics的专属开关,现在得通过Observation的规则来控制是否生成请求耗时指标。
非侵入式关闭方案(无需修改业务代码)
不需要新增业务监控代码,只需要添加一个轻量的配置类,通过自定义ObservationRegistry的规则来禁用自动计时:
import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.aop.ObservedAspect; import org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class DisableRequestAutoTimeConfig { @Bean public ObservationRegistryCustomizer<ObservationRegistry> disableWebRequestAutoTiming() { return registry -> registry.observationConfig() .observationFilter((context, handler) -> { // 拦截Web请求的观测任务,直接跳过执行 return !"http.server.requests".equals(context.getName()); }); } // 若项目中用到@Observed注解,需确保这个Bean存在(不影响单纯禁用自动计时的场景) @Bean public ObservedAspect observedAspect(ObservationRegistry registry) { return new ObservedAspect(registry); } }
如果你更倾向于用配置属性尝试(注意:该属性支持取决于具体Spring Boot小版本),可以在application.properties/application.yml中添加:
management.observation.http.server.requests.enabled=false
但上面的配置类方案是更通用、可靠的,完全是非侵入式,只需要把这个类放到Spring能扫描到的包下就行。
原理简单说明
ObservationRegistryCustomizer是Spring提供的用于自定义Observation配置的扩展点,我们添加的observationFilter会拦截所有观测任务。当匹配到Web请求对应的观测名称http.server.requests时,返回false就会跳过该观测的执行,和原来设置autotime.enabled=false的效果完全一致。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

