Привод Spring Boot 2 без Spring Boot и @EnableAutoConfiguration - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь настроить Spring Actuator с существующим проектом Gradle Spring MVC .Я не могу использовать @ 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, но я не уверен, как это сделать, он кажется недоступным.(Ref: 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, и другие конечные точки недоступны.

...