一、基本概念
Liveness(存活状态):应用是否正常运行(没崩溃、没死锁)
Readiness(就绪状态):应用是否准备好接收流量(初始化完成、依赖加载成功)
ApplicationAvailability:Spring 提供的官方接口,用于获取 / 监听这两个状态
二、代码案例
利用监听器注解,在项目启动时,监听,通过ApplicationAvailability获取应用程序的可用性状态,并对应处理。
java
package com.pzj.springboot3.demos.states;
import jakarta.annotation.Resource;
import org.springframework.boot.availability.ApplicationAvailability;
import org.springframework.boot.availability.AvailabilityChangeEvent;
import org.springframework.boot.availability.LivenessState;
import org.springframework.boot.availability.ReadinessState;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* 自定义Bean,通过 ApplicationAvailability 获取应用可用性状态
*/
@Component
public class AppAvailabilityMonitor {
// 1. 直接注入 Spring 提供的 ApplicationAvailability
@Resource
private ApplicationAvailability applicationAvailability;
// ====================== 主动获取当前状态 ======================
public void checkCurrentState() {
// 获取存活状态(Liveness)
LivenessState livenessState = applicationAvailability.getLivenessState();
// 获取就绪状态(Readiness)
ReadinessState readinessState = applicationAvailability.getReadinessState();
System.out.println("当前应用存活状态:" + livenessState);
System.out.println("当前应用就绪状态:" + readinessState);
}
// ====================== 监听状态变化(推荐) ======================
/**
* 监听 存活状态(Liveness) 变化
*/
@EventListener
public void onLivenessChange(AvailabilityChangeEvent<LivenessState> event) {
LivenessState state = event.getState();
System.out.println("【存活状态变更】:" + state);
// 业务逻辑:比如应用挂了时告警、宕机时释放资源
if (state == LivenessState.BROKEN) {
System.err.println("应用异常,已停止服务!");
}
}
/**
* 监听 就绪状态(Readiness) 变化
*/
@EventListener
public void onReadinessChange(AvailabilityChangeEvent<ReadinessState> event) {
ReadinessState state = event.getState();
System.out.println("【就绪状态变更】:" + state);
// 业务逻辑:应用就绪后初始化任务、加载缓存、注册服务
if (state == ReadinessState.ACCEPTING_TRAFFIC) {
System.out.println("应用已就绪,可以接收流量!");
initBusinessTask();
}
}
// 模拟业务初始化
private void initBusinessTask() {
System.out.println("执行业务初始化:加载配置、预热缓存...");
}
}