Я пытаюсь настроить 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, и другие конечные точки недоступны.