如何为OpenAPI生成的WebFlux客户端采集HTTP指标?
解决OpenAPI生成WebClient.Builder非Spring Bean导致指标采集失效的问题
一、先试OpenAPI生成器自带配置
不用直接改模板,先试试这两个配置项,能直接让生成的客户端用Spring容器里的WebClient.Builder:
- 在maven插件的
<configOptions>里加useSpringBean=true:开启后生成的客户端类会变成Spring Bean,不再用静态方法创建Builder。 - 搭配
webClientBuilderProvider=spring:明确指定用Spring提供的WebClient.Builder实例,这样生成的代码会自动注入容器里的Builder,触发WebClientAutoConfiguration的指标采集逻辑。
给个maven插件的配置片段参考:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.0.1</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <useSpringBean>true</useSpringBean> <webClientBuilderProvider>spring</webClientBuilderProvider> <!-- 其他你的原有配置 --> </configOptions> </configuration> </execution> </executions> </plugin>
二、配置无效时再改模板
如果上面的配置没起作用,再考虑修改Mustache模板:
- 找到OpenAPI生成器对应的
webClient.mustache模板(对应Spring WebFlux客户端的模板文件)。 - 把原来静态创建Builder的代码,换成通过
@Autowired注入容器里的实例。比如把生成代码里的private static final WebClient.Builder builder = WebClient.builder();改成:
@Autowired private WebClient.Builder webClientBuilder;
- 之后创建WebClient的地方都用这个注入的builder,替换原来的静态实例。
三、验证是否生效
改完后启动应用,做两件事确认:
- 检查生成的客户端类,看是不是已经通过
@Autowired注入了WebClient.Builder。 - 访问
/actuator/prometheus端点,查看有没有http_client_requests_*系列的指标,有就说明采集正常了。
内容的提问来源于stack exchange,提问作者Chris Brown
相关产品推荐
相关产品推荐

