springboot故障分析FailureAnalyzer

org.springframework.boot.diagnostics.FailureAnalyzer是springboot框架中的一个接口,用于为应用程序启动失败提供详细的诊断报告。当springboot应用程序无法正常启动时,springboot会尝试查找一个或多个实现了FailureAnalyzer接口的类,以提供关于失败原因的详细信息。

通常,FailureAnalyzer的实现会检查特定的异常或条件,并返回一个FailureAnalyzer对象,该对象包含了对失败的描述、操作建议以及可能的动作链接。

一、FailureAnalyzer故障分析示例:
public class RedisIdentifierFailureAnalyzer extends AbstractFailureAnalyzer<NullPointerException> {@Overrideprotected FailureAnalysis analyze(Throwable rootFailure, NullPointerException cause) {return new FailureAnalysis(cause.getMessage(), "Redis默认数据库标识配置缺失", cause);}
}

上述实现类定义好后,还需要在META-INF/spring.factories文件中指定故障分析类:

# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\com.emily.infrastructure.redis.diagnostics.analyzer.RedisIdentifierFailureAnalyzer

首先不配置Redis默认数据库标识,然后运行应用程序,会触发此故障分析类,可以在控制台看到如下信息:

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 
2024-07-01 20:57:16.194 ERROR default --- [              main] s.b.d.LoggingFailureAnalysisReporter:40   : ***************************
APPLICATION FAILED TO START
***************************Description:Redis默认标识不可为空Action:Redis默认数据库标识配置缺失Disconnected from the target VM, address: '127.0.0.1:58630', transport: 'socket'Process finished with exit code 1
二、故障分析启动流程
  1. org.springframework.boot.SpringApplication#run(java.lang.String…)方法try…catch…捕获异常调用handleRunFailure方法;
  2. org.springframework.boot.SpringApplication#handleRunFailure方法调用reportFailure方法;
  3. org.springframework.boot.SpringApplication#reportFailure方法调用FailureAnalyzers类的reportException方法;
  4. org.springframework.boot.diagnostics.FailureAnalyzers#reportException方法调用report方法;
  5. org.springframework.boot.diagnostics.FailureAnalyzers#report方法通过SPI的方式获取spring.factories文件中的故障分析类,并调用org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter#report方法,最终调用buildMessage方法打印故障分析信息。

org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter#buildMessage代码如下:

    private String buildMessage(FailureAnalysis failureAnalysis) {StringBuilder builder = new StringBuilder();builder.append(String.format("%n%n"));builder.append(String.format("***************************%n"));builder.append(String.format("APPLICATION FAILED TO START%n"));builder.append(String.format("***************************%n%n"));builder.append(String.format("Description:%n%n"));builder.append(String.format("%s%n", failureAnalysis.getDescription()));if (StringUtils.hasText(failureAnalysis.getAction())) {builder.append(String.format("%nAction:%n%n"));builder.append(String.format("%s%n", failureAnalysis.getAction()));}return builder.toString();}

开源SDK:https://github.com/mingyang66/spring-parent

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络游戏运营

游戏运营是将一款游戏平台推入市场&#xff0c;并通过一系列的策略和行动&#xff0c;使玩家从接触、认识到最终成为忠实玩家的过程。这一过程涵盖了多个方面&#xff0c;包括前期准备、上线运营、活动策划、数据分析、渠道合作以及用户维护等。以下是对游戏运营的详细解析&…

HarmonyOS--认证服务-操作步骤

HarmonyOS–认证服务 文章目录 一、注册华为账号开通认证服务二、添加项目&#xff1a;*包名要与项目的包名保持一致三、获取需要的文件四、创建项目&#xff1a;*包名要与项目的包名保持一致五、添加json文件六、加入请求权限七、加入依赖八、修改构建配置文件&#xff1a;bui…

软硬链接

建立软连接 ln -s 指向的文件 软连接文件 建立硬连接 ln 原来文件 硬连接文件 上面我们发现&#xff0c;建立的软链接文件的inode编号和指向文件不同&#xff0c;而建立的硬链接文件inode编号没变&#xff0c;为什么呢&#xff1f; 为什么不能给目录创建硬链接&#xff1f…

macOS 安装 JMeter

在 macOS 上安装 JMeter 有几种不同的方法&#xff0c;可以通过 Homebrew 安装或者手动下载并配置。下面是这两种方法的详细步骤&#xff1a; 方法 1&#xff1a;使用 Homebrew 安装 JMeter 安装 Homebrew&#xff08;如果还未安装&#xff09;&#xff1a; 打开终端并运行以下…

解决添加MPJ插件启动报错

在项目中需要用到多数据源的级联查询&#xff0c;所以引入了MPJ插件&#xff0c;MPJ的版本是1.2.4&#xff0c;MP的版本是3.5.3&#xff0c;但却在启动的时候报错&#xff0c;报错如下&#xff1a; 解决办法&#xff1a; 将MP的版本降到3.5.1

UnrealEngine学习(02):虚幻引擎编辑器界面详解

学习一款软件&#xff0c;我个人建议是先学习怎么用&#xff0c;然后是学习怎么用的好&#xff0c;再研究源码。 上一篇文章详细描述了我们该如何安装虚幻5引擎&#xff1a; UnrealEngine学习(01)&#xff1a;安装虚幻引擎https://blog.csdn.net/zuodingquan666/article/deta…

Spring IOC 创建Bean过程

ABC.class---推断构造涵数-->create Instance&#xff08;普通对象&#xff09;-->依赖注入字段、属性 -->Aware(设置Bean名称&#xff09; -->初始化InitializingBean【void afterPropertiesSet()】回调 -->BeanPostProcessor(AOP)后置处理 初始化之前&…

7-7 数组中能被5整除的数的和

在一维数组中有10个整数&#xff0c;求出其中能被5整除的所有数的和。 输入格式: 在一行中输入10个整数&#xff0c;数据之间用1个空格间隔。 输出格式: 直接输出运算结果&#xff0c;没有任何附加字符。 输入样例: 5 6 8 15 98 45 71 2 3 1输出样例: 65 #include <…

Cypress 调用后端能力 task

在 Cypress 中的测试都是在前端运行的, 一些后端的操作是不可以直接调用的, 例如 fs, 但是可以通过 task 作为桥梁进行调用. 1. 在 cypress.config.js 中配置 e2e: {setupNodeEvents(on, config) {plugins(on, config);},2. 在 plugins/index.js 中实现 const fs require(&q…

【学术英语】Unit3:Academic Writing(学术写作)

文章目录 一、摘要1.1 摘要简介1.2 摘要的两种类型1.3 写摘要的技巧1.4 摘要的关键词1.5 例子1.5.1 例子11.5.2 例子2 二、注释和致谢2.1 注释的格式2.1.1 Book2.1.2 论文2.1.3 例子 2.2 致谢的格式 三、书目选编 一、摘要 1.1 摘要简介 摘要对学术写作极其重要和有用&#x…

小白之 FastGPT Windows 本地化部署

目录 引言环境步骤1. 安装 docker2. 启动 docker3. 浏览器访问4. One API 配置语言模型、向量模型渠道和令牌5. 创建 FastGPT 知识库6. 创建 FastGPT 应用 官方文档 引言 部署之前可以先看一下 RAG 技术原理&#xff0c;也可以后面回过头来看&#xff0c;对一些概念有些了解&a…

Latex插入eps图片不显示报错not found解决方案

Latex插入eps图片不显示并报错&#xff1a; 解决方案&#xff1a; 首先确保.tex文件中添加包\usepackage{epstopdf} winR输入cmd进入系统命令行 进入.tex文件系统盘&#xff0c;代码&#xff1a;D: 进入.tex所在文件夹&#xff0c;代码&#xff1a;cd D:\Desktop\xxx 执行最重要…

Spring Cloud LoadBalancer 源码解析

前言 LoadBalancer&#xff08;负载均衡器&#xff09;&#xff1a;一种网络设备或软件机制&#xff0c;用于分发传入的网络流量负载到多个后端目标服务器上&#xff0c;依次来提高系统的可用性和性能&#xff0c;Spring Cloud 2020 版本以后&#xff0c;移除了对 Netflix 的依…

如何在项目中配置.gitignore文件

1. .gitignore作用 .gitignore文件用于告诉Git哪些文件不应被跟踪或者提交到版本控制中。 2. 创建.gitignore文件 在你的项目根目录下创建一个名为.gitignore的文件 3. 常见规则 3.1 操作系统生成的文件 # macOS .DS_Store .AppleDouble .LSOverride# Windows Thumbs.db …

Physics of Language Models学习小结

1.概述 Physics of Language Models 参考&#xff1a;https://zhuanlan.zhihu.com/p/711391378 这是一系列论文和一个新的LLM研究方向&#xff0c;官网的概述如下。 苹果掉落&#xff0c;盒子移动&#xff0c;但重力和惯性等普遍规律对技术进步至关重要。虽然GPT-5或LLaMA-…

保号套餐千万别随便办理,小心有坑!

现在网上到处都是讨论保号套餐的消息&#xff0c;保号套餐虽好&#xff0c;但是小编提醒大家千万别随便办理&#xff0c;小心有坑&#xff01; 为什么这么说呢&#xff0c;我们先来看一张图&#xff1a; 移动的保号套餐&#xff0c;月租8元&#xff0c;分成两个套餐&#xff0…

算法笔试-编程练习-H-02-24

w这套题&#xff0c;侧重模拟和题目理解&#xff0c;只要按照题目描述正常复现整体分数应该不错 一、数据重删 数据重删是一种节约存储空间的技术&#xff0c;通常情况下&#xff0c;在数据存储池内是有很多重复的数据库。重删则是将这些重复的数据块找出并处理的技术。简单地…

黑神话怎么玩?隐藏BOSS寅虎打法攻略

这期来教大家黑神话悟空寅虎BOSS怎么打&#xff0c;寅虎是游戏中比较强力的一只boss&#xff0c;很多玩家拼尽全力都还是惜败一招&#xff0c;其实想要打赢它需要采用特定的方法和技巧才能攻克&#xff0c;因此接下来小编会给大家介绍下它的打法&#xff0c;还没攻克这个boss的…

P2P 文件共享:现代网络中的高效文件传输

在互联网的世界中&#xff0c;不同应用程序的数据传输方法各异。P2P文件共享&#xff08;Peer-to-Peer File Sharing&#xff09; 作为一种高效的文件传输方式&#xff0c;使得用户可以在没有中央服务器的情况下直接进行文件交换。本文将详细介绍P2P文件共享的基本原理、优势及…

bash代码片段snippets

bash代码片段 # Rename all *.txt to *.text for file in *.txt; domv -- "$file" "${file%.txt}.text" donewhile read x z y; doof"xag.1/$x.png" if"xag/$y.png"cp $if $of done < db.log tree -L 2 | sed s/\xc2\xa0/ /g &g…