1、概览 {#1概览}
Spring Boot 项目 是 Spring 框架的扩展,它提供的功能有助于创建基于 Spring 的独立应用程序,并支持云原生开发。
有时,我们并不想使用 Spring Boot,例如在将 Spring Framework 整合到 Jakarta EE 应用程序时,但我们仍然希望受益于生产就绪功能,如指标和健康检查,即所谓的 "可观察性"。(可在 "Spring Boot 3 和 Observability(可观察性)" 一文中找到详细信息)。
可观察性功能由 Spring Boot Actuator 提供,它是 Spring Boot 的一个子项目。在本文中,我们将了解如何将 Actuator 整合到非 Spring Boot 的应用程序中。
2、项目配置 {#2项目配置}
如果不使用 Spring Boot,我们就需要处理应用打包和服务器运行时配置的问题,还需要自己将 配置外部化,当然,本文并不会涉及这些内容。由于我们不能直接使用 Spring Boot 的 Starter 依赖(本例中为 spring-boot-starter-actuator
),因此我们需要在 application context 中手动添加必要的 Bean。
我们可以手动配置,也可以使用自动配置。因为 Actuator 的配置相当复杂,而且没有任何详细的文档说明,所以我们应该选择自动配置。这是我们需要 Spring Boot 的原因之一,因此我们不能完全排除 Spring Boot。
2.1、添加项目依赖 {#21添加项目依赖}
要集成 Actuator,我们需要 Spring-boot-actuator-autoconfigure 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
<version>3.0.6</version>
</dependency>
这也将通过传递依赖 spring-boot-actuator
、spring-boot
和 spring-boot-autoconfigure
。
2.2、启用自动配置 {#22启用自动配置}
然后,我们启用自动配置。在应用的配置中添加 @EnableAutoConfiguration
即可轻松实现:
@EnableAutoConfiguration
// ... @ComponentScan、@Import 或其他应用配置
public class AppConfig {
// ...
}
注意,这可能会影响整个应用程序,因为如果 classpath 中存在其他自动配置类,这也会自动配置框架的其他部分。
2.3、启用端点 {#23启用端点}
默认情况下,只有 health
端点被启用。Actuator 的自动配置类使用配置属性,例如,WebEndpointAutoConfiguration
使用 WebEndpointProperties
,这些属性被映射到带有 management.endpoints.web
前缀的属性。要启用所有端点,我们需要
management.endpoints.web.exposure.include=*
这些属性必须可供 context 使用,例如,将它们放入 application.properties
文件并用 @PropertySource
对我们的配置类进行注解:
@EnableAutoConfiguration
@PropertySource("classpath:application.properties")
// ... @ComponentScan,@Import 或其他应用配置
public class AppConfig {
}
2.4、测试项目配置 {#24测试项目配置}
现在,我们可以调用 actuator 端点了。我们可以使用此属性启用健康详细(health detail)信息:
management.endpoint.health.show-details=always
我们还可以实现自定义的 health 端点:
@Configuration
public class ActuatorConfiguration {
@Bean
public HealthIndicator sampleHealthIndicator() {
return Health.up()
.withDetail("info", "Sample Health")
::build;
}
}
此时,调用 {url_to_project}/actuator/health
就会得到类似如下的输出结果:
3、总结 {#3总结}
在本教程中,我们了解了如何在非 Spring Boot 应用程序中整合 Spring Boot Actuator。
参考:https://www.baeldung.com/spring-boot-actuator-without-spring-boot