Spring Boot应用运行正常但livenessState DOWN、readinessState OUT_OF_SERVICE
Spring Boot 3.0.6 健康检查状态异常问题排查与解决
问题概述
在Kubernetes 1.24环境运行的Spring Boot 3.0.6应用中,新增JavaMailSender邮件发送功能后,应用业务逻辑正常运行,但Actuator健康检查返回整体状态为DOWN:
- 核心健康组件(db、diskSpace、ping)状态均为
UP livenessState标记为DOWN,readinessState标记为OUT_OF_SERVICE- Kubernetes因健康检查失败持续重启应用
- 回退到Spring Boot 3.0.5版本后,所有健康状态恢复正常;Java版本从Eclipse Temurin 17.0.6+10升级到17.0.7+7后出现该问题,推测与Spring Boot官方issue #35161相关
可能原因
- Spring Boot 3.0.6版本存在健康指标计算的bug,当应用中包含邮件发送类组件时,会错误地将Liveness/Readiness状态标记为异常,即便核心业务无问题
- 虽怀疑
@ComponentScan配置可能影响,但版本回退即可恢复,说明框架版本问题是核心诱因
解决方案
1. 临时降级Spring Boot版本
直接将Spring Boot版本回退到3.0.5,这是最快恢复健康检查正常状态的方法,可立即停止Kubernetes的无效重启。
2. 自定义健康状态指示器
若无法降级,可自定义Liveness和Readiness状态指示器,强制返回正常状态(仅确认应用核心功能正常时使用):
import org.springframework.boot.availability.LivenessState; import org.springframework.boot.availability.ReadinessState; import org.springframework.boot.availability.StateAvailabilityIndicator; import org.springframework.stereotype.Component; @Component public class CustomLivenessIndicator implements StateAvailabilityIndicator<LivenessState> { @Override public LivenessState getState() { return LivenessState.CORRECT; } } @Component public class CustomReadinessIndicator implements StateAvailabilityIndicator<ReadinessState> { @Override public ReadinessState getState() { return ReadinessState.ACCEPTING_TRAFFIC; } }
3. 禁用邮件组件健康检查
若JavaMailSender的健康检查是触发异常的源头,可在配置文件中关闭该组件的健康指标采集:
management: health: mail: enabled: false
4. 升级到修复后的版本
关注Spring Boot官方发布节奏,待包含issue #35161修复的版本(如3.0.7及后续版本)发布后,及时升级框架版本彻底解决问题。
内容的提问来源于stack exchange,提问作者theraven
相关产品推荐
相关产品推荐

