1. 概述
Spring Boot项目提供了创建独立的基于Spring的应用程序的功能,并支持云原生开发。因此,它是对Spring框架的一种扩展,非常有用。
有时候,我们可能不想使用Spring Boot,比如在集成Spring框架到Jakarta EE应用时,但我们仍然希望利用生产就绪的功能,如度量和健康检查,即所谓的“可观测性”。(关于这一点,可以参考文章“使用Spring Boot 3实现可观测性“。)
可观测性功能由Spring Boot Actuator提供,它是Spring Boot的一个子项目。在这篇文章中,我们将了解如何将Actuator集成到不使用Spring Boot的应用中。
2. 项目配置
当排除Spring Boot时,我们需要处理应用程序打包和服务器运行时提供,还需要自己外部化配置(请参阅Spring Boot 3.0.6版本的文档:外部配置特性)。这些由Spring Boot提供的特性对于在基于Spring的应用中使用Actuator并不是必需的。虽然我们确实需要项目的依赖项,但不能使用Spring Boot的启动依赖项(在这个例子中是spring-boot-starter-actuator
)。除此之外,我们还需要在应用程序上下文中添加必要的bean。
我们可以手动完成,也可以使用自动配置。由于Actuator的配置相当复杂,且没有详细文档,我们应该优先选择自动配置。这是我们从Spring Boot那里需要的一部分,所以我们不能完全排除Spring Boot。
2.1. 添加项目依赖
为了集成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. 启用自动配置
然后,我们启用自动配置。这可以通过在应用程序配置中添加@EnableAutoConfiguration
来轻松完成:
@EnableAutoConfiguration
// ... @ComponentScan, @Import or any other application configuration
public class AppConfig {
// ...
}
需要注意的是,这可能会影响到整个应用,因为如果类路径中存在其他自动配置类,它还会自动配置框架的其他部分。
2.3. 启用端点
默认情况下,只有健康端点被启用。Actuator的自动配置类使用配置属性。例如,WebEndpointAutoConfiguration
使用WebEndpointProperties
,它们映射到以"management.endpoints.web"
前缀的属性。要启用所有端点,我们需要:
management.endpoints.web.exposure.include=*
这些属性必须可供上下文访问——例如,通过将它们放入application.properties
文件中,并在配置类上使用@PropertySource
注解:
@EnableAutoConfiguration
@PropertySource("classpath:application.properties")
// ... @ComponentScan, @Import or any other application configuration
public class AppConfig {
}
2.4. 测试项目配置
现在,我们已经准备好调用Actuator端点了。我们可以通过这个属性来启用健康详情:
management.endpoint.health.show-details=always
并且我们可以实现自定义健康端点:
@Configuration
public class ActuatorConfiguration {
@Bean
public HealthIndicator sampleHealthIndicator() {
return Health.up()
.withDetail("info", "Sample Health")
::build;
}
}
然后,通过访问"{url_to_project}/actuator/health"
,将得到如下输出:
3. 总结
在这篇教程中,我们了解了如何在非Spring Boot应用中集成Spring Boot Actuator。如往常一样,所有的代码实现可以在GitHub上的相关教程中找到。