• 【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已构建完成处于就绪");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    注意事项

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

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

  • 相关阅读:
    python画图
    Ajax基础
    【Android Studio】Android Studio修改代码编辑区(工作区)背景色
    Day815.数据库参数设置优化 -Java 性能调优实战
    报错解决——AttributeError: ‘OpenpyxlWriter‘ object has no attribute ‘save‘
    H桥级联型五电平三相逆变器Simulink仿真模型
    Linux系统操作MySql常用命令
    getprime(512)CTF中的RSA基本方法
    从0到1 express 安装swagger
    Polygon L2扩容方案揭秘
  • 原文地址:https://blog.csdn.net/yang131peng/article/details/134479511