Spring Boot 2.x迁移至3.2.0:WebMvcTagsContributor替代方案问询
在Spring Boot 3.x版本中,原WebMvcTagsContributor已被废弃,官方将其拆分为两个独立接口:RequestTagsContributor和LongRequestTagsContributor,分别对应原类的getTags()和getLongRequestTags()方法。以下是具体替代实现步骤:
1. 实现 RequestTagsContributor(替代原getTags())
这个接口负责生成常规请求的监控标签,参数包含请求、响应、处理器及异常信息,方便扩展自定义标签:
import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import org.springframework.boot.actuate.web.tags.RequestTagsContributor; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public class CustomRequestTagsContributor implements RequestTagsContributor { @Override public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) { // 复用原getTags()中的业务逻辑,添加自定义标签 Tags customTags = Tags.of("custom_request_tag", "custom_value"); // 示例:如果请求有异常,添加异常类标签 if (exception != null) { customTags = customTags.and("exception_type", exception.getClass().getSimpleName()); } return customTags; } }
2. 实现 LongRequestTagsContributor(替代原getLongRequestTags())
针对长请求场景生成标签,接口参数包含请求和处理器:
import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import org.springframework.boot.actuate.web.tags.LongRequestTagsContributor; import jakarta.servlet.http.HttpServletRequest; public class CustomLongRequestTagsContributor implements LongRequestTagsContributor { @Override public Iterable<Tag> getLongRequestTags(HttpServletRequest request, Object handler) { // 复用原getLongRequestTags()中的业务逻辑 return Tags.of("long_request_tag", "long_request_value"); } }
3. 注册自定义标签贡献类
将上述两个实现类注册为Spring Bean,框架会自动加载并使用:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TagsContributorConfig { @Bean public RequestTagsContributor customRequestTagsContributor() { return new CustomRequestTagsContributor(); } @Bean public LongRequestTagsContributor customLongRequestTagsContributor() { return new CustomLongRequestTagsContributor(); } }
额外提示
- 包路径变更:原类位于
org.springframework.boot.actuate.metrics.web.servlet,新接口在org.springframework.boot.actuate.web.tags包下 - 可借助
RequestTags和LongRequestTags工具类生成默认标签(如请求方法、响应状态码等),结合自定义标签使用
内容的提问来源于stack exchange,提问作者Guruprasad A N
相关产品推荐
相关产品推荐

