gpt4 book ai didi

没有 Spring Boot 和 @EnableAutoConfiguration 的 Spring Boot 2 Actuator

转载 作者:行者123 更新时间:2023-12-05 07:22:53 24 4
gpt4 key购买 nike

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

最佳答案

我使用的是 Maven,而不是 Gradle,但情况类似。我有一个工作 spring-boot-actuator 1.4.2.RELEASE Health actuator endpoint with Spring MVC 4.3.21。升级到 spring-boot-starter-actuator 2.6.1 和 Spring MVC 5.3.13 并且以下工作对我来说是达到/myAppContext/health。

DispatcherServletAutoConfiguration 导入可能能够替换您的显式 DispatcherServlet bean。我的案例不包括信息执行器端点,但对我来说关键是下面的特定导入。至少在我的测试中,顺序对于某些导入来说有些重要。

我对 spring boot 知之甚少,所以这是启用自动配置、注入(inject) spring boot TRACE 日志输出并尝试许多不同的导入组合的结果。

@Configuration
@EnableWebMvc
@Import({
DispatcherServletAutoConfiguration.class,
WebMvcAutoConfiguration.class,
WebEndpointAutoConfiguration.class,
EndpointAutoConfiguration.class,
HealthEndpointAutoConfiguration.class,
WebMvcEndpointManagementContextConfiguration.class
})

@PropertySource("classpath:/health.properties")
public class MyAppActuatorConfig {
// 1.x version had EndpointHandlerMapping and HealthMvcEndpoint beans here.
// There may be a more spring-boot-ish way to get this done : )
}

还有一个最小的 health.properties,它适合我在安全性已经到位的情况下的部署细节:

management.endpoints.web.base-path=/

management.endpoint.health.show-details=when-authorized
management.endpoint.health.show-components=when-authorized

关于没有 Spring Boot 和 @EnableAutoConfiguration 的 Spring Boot 2 Actuator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56336916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com