gpt4 book ai didi

java -/actuator/prometheus在@SpringbootTest中丢失

转载 作者:行者123 更新时间:2023-12-03 11:17:38 25 4
gpt4 key购买 nike

我正在使用springbooot 2.4.0,并添加了以下依赖项以启用普罗米修斯度量标准:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
然后在我的application.properties中,我具有以下属性
management.endpoints.web.exposure.include=*
management.metrics.enable.all=true
我正在尝试运行一个简单的集成测试,以查看我的自定义指标出现在/actuator/prometheus端点上。下面的代码
package com.example.demo;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import static io.restassured.RestAssured.given;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class IntegrationTest {

@LocalServerPort
private int port;

private String baseUrl;

@BeforeEach
public void setup() {
baseUrl = "http://localhost:" + port;
}

@Test
public void metricsEndpoint() throws Exception {

given().when().get(baseUrl + "/demo/actuator/prometheus")
.then()
.statusCode(200);
}
}
我得到的错误是
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.
而如果我对springboot执行器提供的任何其他端点重复相同的请求,我将正确获得响应,例如,我尝试了/actuator/health,/actuator/info,/actuator/metrics等。
这仅在带有@Springboot批注的集成测试期间发生,这很奇怪,因为如果我运行我的应用程序并向 postman 发出对本地主机的请求,地址为localhost:8080/actuator/prometheus,我会正确地获得响应。
就像在测试期间未加载prometheus注册表一样。
有人可以帮忙吗?
提前致谢。
编辑:解决方案是约翰内斯·克鲁格(Johannes Klug)建议的解决方案。添加注释@AutoConfigureMetrics解决了我的问题

最佳答案

我遇到了同样的问题。在对spring-context ConditionEvaluator进行了一些跟踪之后,我发现@ConditionalOnEnabledMetricsExport("prometheus")上新引入的PrometheusMetricsExportAutoConfiguration条件阻止了端点的加载。
由于https://github.com/spring-projects/spring-boot/pull/21658,这是预期的行为,并且会影响spring-boot 2.4.x
使固定:
将@AutoConfigureMetrics添加到您的测试中

@AutoConfigureMetrics
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class IntegrationTest {

关于java -/actuator/prometheus在@SpringbootTest中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65360650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com