没有Spring Boot和@EnableAutoConfiguration的Spring Boot 2执行器

时间:2019-05-28 07:19:43

标签: spring spring-mvc spring-boot-actuator

我正在尝试使用现有的Gradle Spring MVC 项目设置 Spring Actuator 。我无法使用 @EnableAutoConfiguration 。 不幸的是,我无法到达执行器端点,我想我缺少了一些东西。

项目中的Spring依赖项是:

// springVersion = 5.1.+
implementation(
            "org.springframework:spring-beans:$springVersion",
            "org.springframework:spring-webmvc:$springVersion",
            "org.springframework:spring-jdbc:$springVersion")

implementation 'org.springframework.boot:spring-boot-starter-actuator'

我正在尝试通过以下方式配置项目:

@Configuration
@Import({EndpointAutoConfiguration.class,
        MetricsEndpointAutoConfiguration.class,
        HealthEndpointAutoConfiguration.class,
        MappingsEndpointAutoConfiguration.class,
        InfoEndpointAutoConfiguration.class})
@EnableWebMvc
public class DI_App {

}

在属性文件中,我添加了:

management.endpoints.web.exposure.include=*

未启用任何致动器端点,尝试访问它们时得到404。 我遇到了许多相关问题,但是没有一个解决方案对我有用。

我可能需要定义自定义EndpointHandlerMapping,但不确定如何执行此操作,这似乎不可用。 (参考:https://stackoverflow.com/a/53010693


编辑:
目前,我的应用程序配置如下:

@Configuration
@EnableWebMvc
@ComponentScan("com.test.springtest")
@Import({
        ConfigurationPropertiesReportEndpointAutoConfiguration.class,
        EndpointAutoConfiguration.class,
        WebEndpointAutoConfiguration.class,
        HealthEndpointAutoConfiguration.class,
        HealthIndicatorAutoConfiguration.class,
        InfoEndpointAutoConfiguration.class,
        InfoContributorAutoConfiguration.class,
        LogFileWebEndpointAutoConfiguration.class,
        LoggersEndpointAutoConfiguration.class,
        WebMvcMetricsAutoConfiguration.class,
        ManagementWebSecurityAutoConfiguration.class,
        ManagementContextAutoConfiguration.class,
        ServletManagementContextAutoConfiguration.class
})
public class DI_App {
    private final ApplicationContext _applicationContext;

    DI_App(ApplicationContext applicationContext) {
        _applicationContext = applicationContext;
        System.setProperty("management.endpoints.web.exposure.include", "*");
        System.setProperty("management.endpoints.jmx.exposure.exclude", "*");
        System.setProperty("management.endpoints.web.base-path", "/manage");
        System.setProperty("management.server.port", "10100");
    }

    @Bean
    public WebMvcEndpointHandlerMapping endpointHandlerMapping(Collection<ExposableWebEndpoint> endpoints) {
        List<String> mediaTypes = List.of(MediaType.APPLICATION_JSON_VALUE, ActuatorMediaType.V2_JSON);
        EndpointMediaTypes endpointMediaTypes = new EndpointMediaTypes(mediaTypes, mediaTypes);
        WebEndpointDiscoverer discoverer = new WebEndpointDiscoverer(_applicationContext,
                new ConversionServiceParameterValueMapper(),
                endpointMediaTypes,
                List.of(EndpointId::toString),
                emptyList(),
                emptyList());

        return new WebMvcEndpointHandlerMapping(new EndpointMapping("/manage"),
                endpoints,
                endpointMediaTypes,
                new CorsConfiguration(),
                new EndpointLinksResolver(discoverer.getEndpoints()));
    }
}

我必须添加dispatcherServlet bean,以便能够将ManagementContextAutoConfiguration.class添加到Imports:

@Component
public class AppDispatcherServlet implements DispatcherServletPath {
    @Override
    public String getPath() {
        return "/";
    }
}

当前状态是,当转到/manage端点时,我得到以下信息:

{"_links":{"self":{"href":"http://localhost:10100/dev/manage","templated":false},"info":{"href":"http://localhost:10100/dev/manage/info","templated":false}}}

但是http://localhost:10100/dev/manage/info返回404,并且没有其他端点可用。

0 个答案:

没有答案