现有Web应用程序的Spring Boot健康检查

13

我有一个现有的Spring MVC Web应用程序。现在我只想使用spring-boot-starter-actuator中存在的健康检查功能。

我是Spring Boot的新手,所以不确定是否需要将整个项目转换为Spring Boot项目才能使健康检查正常工作。我可以只包含依赖项并以某种方式仅启用所需功能吗?

3个回答

20

我自己找到了答案。我用的是spring-boot-actuator而不是spring-boot-starter-actuator。我不需要使用@SpringBootApplication来初始化应用程序,现在只需导入所需的自动配置类即可。因此,配置类现在看起来像这样:

@Configuration
@ComponentScan(basePackages = { "org.example" })
@Import({MyApplicationContext.class, EndpointWebMvcAutoConfiguration.class, 
  ManagementServerPropertiesAutoConfiguration.class, EndpointAutoConfiguration.class, 
  HealthIndicatorAutoConfiguration.class})
@PropertySource("classpath:app.properties")
@EnableWebMvc
public class MyWebApplicationContext {
...
}

EndpointWebMvcAutoConfiguration依赖于ManagementServerProperties,因此必须导入它。这似乎是我所需的最基本配置。如果有更好的替代方案,请告诉我。


您还可以导入 PublicMetricsAutoConfiguration.class,以获取在 /metrics 端点可用的 jvm/threads 指标。 - Angad
3
如何使用Spring Boot Admin监控非Spring Boot应用程序? - user34567
对我没用。我正在使用gretty插件运行Spring Web应用程序。还需要进行其他配置吗? - Abhishek Ramachandran

7

首先,我想说sidgate的回答是正确的。但也许有人需要启用所有指标或选择不同的指标集。

您仍然可以使用spring-boot-starter-actuator而不是spring-boot-actuator

要启用所有指标

@org.springframework.context.annotation.Configuration
@org.springframework.boot.autoconfigure.EnableAutoConfiguration
@org.springframework.boot.actuate.autoconfigure.ManagementContextConfiguration
public class MyApplicationContext {
}

where @EnableAutoConfiguration

org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.InfoContributorAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.JolokiaAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.MetricsDropwizardAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.MetricsChannelAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.MetricExportAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.PublicMetricsAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.TraceRepositoryAutoConfiguration,
org.springframework.boot.actuate.autoconfigure.TraceWebFilterAutoConfiguration.class

以及 @ManagementContextConfiguration

org.springframework.boot.actuate.autoconfigure.EndpointWebMvcManagementContextConfiguration,
org.springframework.boot.actuate.autoconfigure.EndpointWebMvcHypermediaManagementContextConfiguration

启用Spring Boot配置

若要启用某些管理端点,您可以直接导入端点的配置,如sidgate已经解释过。

@Configuration
@Import({
org.springframework.boot.actuate.autoconfigure.AuditAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.CacheStatisticsAutoConfiguration.class,

...

})
public class MyApplicationContext {
}

附言:当然,Spring应用程序上下文和属性初始化仍可以通过注释或XML配置进行配置。


3
如果有人在现有的Spring MVC项目中寻找Spring Boot Actuator 2.x的配置,下面是我用过的配置:
@Configuration
@Import({
        EndpointAutoConfiguration.class,
        HealthIndicatorAutoConfiguration.class,

        InfoEndpointAutoConfiguration.class,
        HealthEndpointAutoConfiguration.class,

        WebEndpointAutoConfiguration.class,
        ServletManagementContextAutoConfiguration.class,
        ManagementContextAutoConfiguration.class,
})
@EnableConfigurationProperties(CorsEndpointProperties.class)
class ActuatorConfiguration {

    @Bean //taken from WebMvcEndpointManagementContextConfiguration.class
    public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,
                                                                         ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier,
                                                                         EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties,
                                                                         WebEndpointProperties webEndpointProperties) {
        List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
        Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
        allEndpoints.addAll(webEndpoints);
        allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
        allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
        EndpointMapping endpointMapping = new EndpointMapping(webEndpointProperties.getBasePath());
        return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
                corsProperties.toCorsConfiguration(),
                new EndpointLinksResolver(allEndpoints, webEndpointProperties.getBasePath()));
    }

    @Bean
    DispatcherServletPath dispatcherServletPath() {
        return () -> "/";
    }

}

我已经包含了

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator-autoconfigure</artifactId>
        <version>2.1.18.RELEASE</version>
    </dependency>

为了与我一直在使用的基线Spring版本(5.1.19.RELEASE)兼容。

1
对于版本大于2.2.0,您应该将HealthIndicatorAutoConfiguration.class替换为HealthContributorAutoConfiguration。https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/api/deprecated-list.html - Denis Makarskiy
1
感谢Jakub和Denis。我有一个使用Spring WebMVC 5.x的遗留应用程序,我一直在努力让Actuator正常工作。我能够使用版本2.5.13,并将false添加到WebMvcEndpointHandlerMapping构造函数的latest参数中。 - Thiago Cavalcanti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接