我最近将SpringBoot项目从1.1升级到1.4,突然,“/health”endpoint的测试开始失败
@SpringBootTest
class HealthTest extends Specification {
@Autowired
RestTemplate thirdPartyRestTemplate
def 'should set health status based on third party service'() {
given:
MockRestServiceServer thirdPartyServerMock = MockRestServiceServer.createServer(thirdPartyRestTemplate)
thirdPartyServerMock
.expect(MockRestRequestMatchers.requestTo('/status'))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(thirdPartyServerResponse).body('{}'))
when:
def response = RestAssured.given().get('/health')
println(response.statusCode)
Map health = response.as(Map)
then:
thirdPartyServerMock.verify()
health == expectedHealth
where:
thirdPartyServerResponse | expectedHealth
HttpStatus.OK | [status: 'UP', thirdPartyServer: 'UP']
HttpStatus.SERVICE_UNAVAILABLE | [status: 'DOWN', thirdPartyServer: 'DOWN']
}
}
发生的事情是:第一个测试总是通过,而第二个测试总是失败。输出为200。如果顺序颠倒,也会发生同样的情况,所以
where:
thirdPartyServerResponse | expectedHealth
HttpStatus.SERVICE_UNAVAILABLE | [status: 'DOWN', thirdPartyServer: 'DOWN']
HttpStatus.OK | [status: 'UP', thirdPartyServer: 'UP']
这一次,503失败了。如果我添加线程。在像这样的实际Rest电话之前先睡一觉
when:
Thread.sleep(1000)
def response = RestAssured.given().get('/health')
那它每次都会过去!因此,Spring似乎在MockRestServiceServer
中引入了一些更改,并且需要一些时间来配置一个模拟(可能现在在单独的线程中执行)。
有人有类似的问题吗?如何绕过此线程。睡眠修复和这种行为的解释是什么?
事实证明,Spring为健康endpoint引入了缓存机制,默认情况下,它将结果缓存1秒。从文档中:
# Time to live for cached result, in milliseconds.
endpoints.health.time-to-live=1000
一旦我将配置更改为:
endpoints:
health:
time-to-live: 0
考试又开始通过了。
我已经用spring Security保护了我的spring boot应用程序(基本身份验证)。我为可以使用监视和管理的用户添加了角色管理。我设置management.security.roles=management。具有此角色的用户只能看到状态(使用运行状况终结点)。如果我设置management.security.role=management,则一切正常(具有此角色的用户可查看所有健康参数
我有一个WebFlux、Health Actuctor和Spring Security的项目。我正在尝试构建自定义身份验证,但该身份验证也会在健康执行器endpoint上发挥作用。我怎样才能禁用它? 根据文档,我实现了一个自定义的,下面是它的基本版本: 根据文档,不应该要求我进行任何额外的配置来禁用健康endpoint上的身份验证。以下是中的配置: 尽管添加了此功能,但仍会导致状态代码也是。如何禁
我的团队将我们的微服务从Spring Boot1迁移到了版本2,由于执行器发生了变化,我们通过prometheus jmx exporter导出的健康endpoint度量不再起作用。 通常的/acture/health按预期工作,但prometheus-jmx-exporter无法接收它,尽管尝试了几个方法: 我更改了exporter-config.yaml中的元信息,以反映Spring Boot
在我的项目中,我不想使用。我的application.java有、和注释。 我在pom.xml中添加了Spring Boot执行器依赖项。但是,当我尝试访问时,得到的是404。我相信我需要指定一些配置类作为导入注释的一部分。我需要帮助弄清楚配置是什么。
我试图为部署到k8s的应用程序设置就绪探测,但在执行器/健康endpoint下,与执行器/健康/就绪endpoint相比,我得到了不同的状态。 重要的是,只有当应用程序部署到k8s集群时,才会观察到这种行为。 因此,在应用程序中没有任何额外的配置。属性我正在获取的文件: 这似乎是正确的——如果准备状态是,健康endpoint也会返回,因为它包括组。这至少是一致的。 另一方面,当我在应用程序中指定准
我将Drools与Eclipse和Maven一起用于一个进行许多模式匹配的应用程序。我想使用KieScanner自动更新正在运行的KieSession,而无需重新启动应用程序。但这似乎不起作用。 我使用的是7.24.0。t043用于组织。kie和org。流口水。 我只使用我的本地Maven存储库,所以我已经指定了路径并在我的settings.xml.中设置为true,我还验证了使用最新版本创建一个