【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中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/161785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决docker运行elastic服务端启动不成功

现象: 然后查看docker日志,发现有vm.max_map_count报错 ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 解决办法: 1. 宿主机(运行doc…

腾讯云新用户优惠活动有哪些可以参加?腾讯云新人服务器优惠活动

腾讯云作为国内领先的云服务提供商,不仅为用户提供稳定可靠的云服务器,还为新用户带来了一系列的优惠活动和代金券,以降低购买成本,提高业务效益。在这里,我们将为您详细介绍腾讯云服务器的新人优惠活动及代金券&#…

进程程序替换与exec系统调用

进程程序替换 进程程序替换是指将一个正在运行的进程替换为另一个可执行程序。它的本质是调用了Linux操作系统中的exec系统调用。而exec系统调用是一个家族函数,例如execl、execv、execle、execve等。它们的共同特点是当当前进程执行到该函数时,就会直接…

竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

美颜sdk是什么?美颜sdk技术解析与比较

美颜SDK的出现为开发者提供了快速实现高质量美颜效果的工具,然而,在众多美颜SDK中,技术实现和效果差异巨大。本文将对美颜SDK进行技术解析,并进行比较,以帮助开发者更好地选择适合其应用需求的美颜SDK。 一、美颜SDK…

GCD:异步同步?串行并发?一文轻松拿捏!

GCD 文章目录 GCD进程线程进程与线程的关系进程与线程的区别 任务(执行的代码)队列线程与队列的关系 队列任务**同步执行任务(sync)**辅助方法**异步执行任务(async)**总结栅栏任务迭代任务 队列详细属性QoSAttributes…

视频剪辑技巧:简单步骤,批量剪辑并随机分割视频

随着社交媒体平台的广泛普及和视频制作需求的急剧增加,视频剪辑已经成为了当今社会一项不可或缺的技能。然而,对于许多初学者来说,视频剪辑可能是一项令人望而生畏的复杂任务。可能会面临各种困难,如如何选择合适的软件和硬件、如…

Vue3 shallowRef 和 shallowReactive

一、shallowRef 使用shallowRef之前需要进行引入: import { shallowRef } from vue; 使用方法和ref 的使用方法一致,以下是二者的区别: 1. 如果ref 和 shallowRef 都传入的是普通数据类型的数据,那么他们的效果是一样的&#x…

​软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】 课本里章节里所有蓝色字体的思维导图

【C++】chono库:使用及源码分析

文章目录 0. 概述1. duration1.1 分析std::chrono::duration_cast() 1.2 使用案例std::chrono::duration::count() 1.3 部分源码 2. time_point2.1 分析std::chrono::time_point_cast() 2.2 使用举例std::chrono::time_point::time_since_epoch() 2.3 部分源码 0. 概述 本篇文…

将ArduinoIDE库文件移动到其他磁盘的方法

本文主要介绍更改软件包位置Arduino IDE (含2.0以上版本)的方法。 Arduino IDE 默认将软件包安装到 C 盘,如果你使用的开发板较多,产生的库文件很大,会导致 C 盘可用空间不足,博主只用了ESP开发板&#xf…

Python程序打包指南:手把手教你一步步完成

最近感兴趣想将开发的项目转成Package,研究了一下相关文章,并且自己跑通了,走了一下弯路,这里记录一下如何打包一个简单的Python项目,展示如何添加必要的文件和结构来创建包,如何构建包,以及如何…

纯CSS自定义滚动条样式

.my-carousel{height: 474px;overflow-y: auto; } /*正常情况下滑块的样式*/ .my-carousel::-webkit-scrollbar {width: 5px; } .my-carousel::-webkit-scrollbar-thumb {border-radius: 8px;background-color: #ccc; } .my-carousel::-webkit-scrollbar-track {border-radius:…

生活总是自己的,请尽情打扮,尽情可爱,,

同色系拼接羽绒服了解一下 穿上时尚感一下子就突显出来了 90白鸭绒填充,不仅时尚还保暖 设计感满满的羽绒服不考虑一下吗?

Git企业开发级讲解(四)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、理解分⽀二、创建分支三、切换分⽀四、合并分⽀五、删除分⽀六、合并冲突七、分⽀管理策略…

Windows10下Maven3.9.5安装教程

文章目录 1.下载maven2.安装3.配置系统变量3.1.新建系统变量 MAVEN_HOME3.2.编辑系统变量Path 4.CMD命令测试是否安装成功5.配置maven本地仓库6.配置国内镜像仓库 1.下载maven 官网 https://maven.apache.org/download.cgi 点击下载。 2.安装 解压到指定目录 D:\installSoft…

vue3基础学习

##以前怎么玩的? ###MVC Model:Bean View:视图 Controller ##vue的ref reactive ref:必须是简单类型 reactive:必须不能是简单类型 ###创建一个Vue项目 npm init vuelatest ###生命周期 ###setup相关 ####Vue2的一些写法 -- options API ####Vue3的写法 组合式API Vu…

深入理解ResNet网络:实现与应用

Resnet 在深度学习领域,卷积神经网络(CNN)是一种非常重要的模型,它在图像识别、目标检测等领域取得了显著的成果。然而,随着网络层数的增加,梯度消失和梯度爆炸问题变得越来越严重,导致训练深层…

OpenCV快速入门:图像滤波与边缘检测

文章目录 前言一、噪声种类与生成1.1 椒盐噪声1.2 高斯噪声1.3 彩色噪声 二、卷积操作2.1 卷积基本原理2.2 卷积操作代码实现 三、线性滤波3.1 均值滤波均值滤波原理均值滤波公式均值滤波代码实现 3.2 方框滤波方框滤波原理方框滤波公式方框滤波代码实现 3.3 高斯滤波高斯滤波原…

Matalab插值详解和源码

转载:Matalab插值详解和源码 - 知乎 (zhihu.com) 插值法 插值法又称“内插法”,是利用函数f (x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方…
最新文章