我正在尝试使用现有的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,并且没有其他端点可用。