【springboot笔记】程序可用性检测ApplicationAvailability

1.背景

springboot-3.1.5 ApplicationAvailability LivenessState ReadinessState AvailabilityChangeEvent
我们可以通过ApplicationAvailability获取当前应用程序的可用性,这个可用性包括ApplicationContext和对外请求路由两种。
LivenessState 是表示ApplicationContext的状态
ReadinessState 是表示路由请求是否可使用的状态
在这里插入图片描述
可以解决的问题:
在应用程序内对ApplicationContext和路由请求是否正常运行进行监听
使用场景:
通过监听ReadinessState状态,判断服务是否启动成功,然后通过飞书或者钉钉或者企业微信进行服务重启通知

监听服务是否可用

@Component
public class ApplicationAvailabilityExporter {

    @EventListener
    public void onStateChange(AvailabilityChangeEvent event) {
        AvailabilityState state = event.getState();
        if (state.equals(ReadinessState.ACCEPTING_TRAFFIC)) {
            System.out.println("应用程序已经可以接受外部请求");
        } else if (state.equals(ReadinessState.REFUSING_TRAFFIC)) {
        	// kill -9 pid (强杀) 不会触发
        	// kill -2 pid (退出信号通知)可以出发
            System.out.println("应用程序拒绝接受外部请求");
        } else if (state.equals(LivenessState.BROKEN)) {
            System.out.println("ApplicationContext未就绪");
        } else if (state.equals(LivenessState.CORRECT)) {
            System.out.println("ApplicationContext已构建完成处于就绪");
        }
    }
}

注意事项

PostContruct,CommandLineRunner,ApplicationRunner。
这三个都能用来处理一些业务配置等初始化的问题,其中PostContruct是在ApplicationContext的构建阶段,也就是BROKEN阶段,这个时候ApplicationContext还没有构建完成,而CommandLineRunner和ApplicationRunner是在CORRECT和REFUSING_TRAFFIC阶段,这也就意味ApplicationContext已经构建完成但是路由请求还没进来。

所以一般业务数据和配置的缓存建议放在CommandLineRunner和ApplicationRunner中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值