You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:08:08