如何在非弹簧护套应用中集成弹簧执行器?

问题描述

我有一个GWT应用程序,它不是Spring Boot应用程序,并且我设法将执行器v1.5.9和spring v4.3.3与此配置类集成在一起。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.EndpointWebMvcManagementContextConfiguration;
import org.springframework.boot.actuate.autoconfigure.HealthindicatorAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.MetricExportAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.MetricFilterautoConfiguration;
import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.MetricsChannelAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.MetricsDropwizardAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.PublicmetricsAutoConfiguration;
import org.springframework.boot.actuate.endpoint.EndpointProperties;
import org.springframework.boot.actuate.endpoint.HealthEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@Configuration
@Import({ EndpointWebMvcManagementContextConfiguration.class,ManagementServerPropertiesAutoConfiguration.class,EndpointAutoConfiguration.class,HealthindicatorAutoConfiguration.class,MetricExportAutoConfiguration.class,MetricFilterautoConfiguration.class,MetricsChannelAutoConfiguration.class,MetricsDropwizardAutoConfiguration.class,MetricRepositoryAutoConfiguration.class,PublicmetricsAutoConfiguration.class,EndpointProperties.class,ManagementWebSecurityAutoConfiguration.class })
@PropertySource("classpath:Application.properties")
public class HealthCheckConfiguration {
  
  @Bean
  @Autowired
  public HealthMvcEndpoint healthMvcEndpoint(HealthEndpoint delegate) {
      return new HealthMvcEndpoint(delegate,true);
  }
  
}

在新版本的弹簧执行器v2.3.1和spring v5.2.7中,您能帮我做同样的事情吗? 谢谢,

解决方法

这个配置对我有用(对于带有弹簧启动执行器的 SpringMVC 项目)

@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) 兼容

执行器端点暴露在 /actuator/*