返回顶部
首页 > 资讯 > 精选 >启动Spring Boot 项目失败如何解决
  • 509
分享到

启动Spring Boot 项目失败如何解决

2023-06-06 16:06:36 509人浏览 独家记忆
摘要

启动Spring Boot 项目失败如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。spring Boot 项目是不是经常失败,显示一大堆的错误信息,如端口重复绑定时

启动Spring Boot 项目失败如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

spring Boot 项目是不是经常失败,显示一大堆的错误信息,如端口重复绑定时会打印以下异常:

***************************APPLICATioN FaiLED TO START***************************Description:Embedded servlet container failed to start. Port 8080 was already in use.Action:Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

这个大家应该很熟悉了吧!

错误信息大家都能看懂,但很不友好,那么,Spring Boot 是怎么实现这样一个异常错误信息输出的呢?今天栈长分享一个 Spring Boot 启动失败的简单易懂的玩法,让新来的实习生 1 秒都能看出问题。

如果你对 Spring Boot 还不是很熟悉,或者只是会简单的使用,那还是建议你深入学习下吧,推荐这个 Spring Boot 学习仓库,欢迎 Star 关注:

https://GitHub.com/javastacks/spring-boot-best-practice

Failure Analyzers 介绍

Spring Boot 中注册了许多 "Failure Analyzers",即 "失败分析器",Spring Boot 中的启动失败的场景都是由这些失败分析器拦截处理的。

Spring Boot 提供了 FailureAnalyzers 接口:

package org.springframework.boot.diagnostics;@FunctionalInterfacepublic interface FailureAnalyzer {  FailureAnalysis analyze(Throwable failure);}

这个接口的目的就是: 分析启动失败异常并显示给用户有用的诊断信息。

Spring Boot 内置注册的所有失败分析器在这个文件里面:

/org/springframework/boot/spring-boot/2.3.5.RELEASE/spring-boot-2.3.5.RELEASE-sources.jar!/META-INF/spring.factories

注册的所有失败分析器列表:

# Failure Analyzersorg.springframework.boot.diagnostics.FailureAnalyzer=\org.springframework.boot.context.properties.NotConstructorBoundInjectionFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.BeanDefinitionOverrideFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.BindValidationFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.NoSuchMethodFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyNameFailureAnalyzer,\org.springframework.boot.diagnostics.analyzer.InvalidConfigurationPropertyValueFailureAnalyzer

再回到上面的端口重复绑定启动失败异常,就是注册了 PortInUseFailureAnalyzer 这个失败分析器,可以看到 PortInUseFailureAnalyzer 失败分析器就在注册列表里面。

再来看下 PortInUseFailureAnalyzer 源码

class PortInUseFailureAnalyzer extends AbstractFailureAnalyzer<PortInUseException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, PortInUseException cause) {  return new FailureAnalysis("WEB server failed to start. Port " + cause.getPort() + " was already in use.",   "Identify and stop the process that's listening on port " + cause.getPort() + " or configure this "     + "application to listen on another port.",   cause); }}

只要应用启动过程上抛出了 PortInUseException 异常就会被这个失败分析器拦截并输出可读性的错误信息,现在知道绑定重复绑定错误是怎么输出的了。

自定义 Failure Analyzers

从内置的失败分析器中可以发现,所有的分析器都继承了这个抽象基类是:AbstractFailureAnalyzer,它实现了 FailureAnalyzer 接口,一般基于这个抽象基类就可以实现自定义失败分析器的扩展。

下面栈长通过两个示例带大家了解下,如何扩展或者自定义一个 FailureAnalyzer。

1、重写端口失败分析器

比如说上面的PortInUseFailureAnalyzer 输出内容是英文的,不是很直观的看出,我们可以自己实现一个中文的端口失败分析器。

很简单,创建一个失败分析器继承 AbstractFailureAnalyzer 抽象类即可:

package cn.javastack.SpringBoot.features.analyzer;import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;import org.springframework.boot.diagnostics.FailureAnalysis;import org.springframework.boot.web.server.PortInUseException;public class PortInUseFailureAnalyzer extends AbstractFailureAnalyzer<PortInUseException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, PortInUseException cause) {  return new FailureAnalysis("你启动的端口 " + cause.getPort() + " 被占用了.",   "快检查下端口 " + cause.getPort() + " 被哪个程序占用了,或者强制杀掉进程.",   cause); }}

重写 analyze 方法,并返回一个 FailureAnalysis 对象,FailureAnalysis 类的三个主要信息分别是:

public FailureAnalysis(String description, String action, Throwable cause) { this.description = description; this.action = action; this.cause = cause;}

即要展示的:可读性的错误描述、建议的检查修复动作、原始异常。

然后在自己的资源目录下创建 META-INF/spring.factories 文件,内容添加:

org.springframework.boot.diagnostics.FailureAnalyzer=\cn.javastack.springboot.features.analyzer.PortInUseFailureAnalyzer

启动输出:

***************************APPLICATION FAILED TO START***************************Description:你启动的端口 8080 被占用了.Action:快检查下端口 8080 被哪个程序占用了,或者强制杀掉进程.

这样重新实现一下是不是要清楚多了?实习生都能看懂!

2、自定义失败分析器

下面再来自定义一个全新的失败分析器,让大家能更清楚的认识失败分析器。

我们在创建 Bean 的过程中手动抛出一个自定义的异常:

@Beanpublic CommandLineRunner commandLineRunner(){ throw new JavastackException("Java技术栈异常");}

添加一个失败分析器拦截该异常:

package cn.javastack.springboot.features.analyzer;import org.springframework.boot.diagnostics.AbstractFailureAnalyzer;import org.springframework.boot.diagnostics.FailureAnalysis;public class JavastackFailureAnalyzer extends AbstractFailureAnalyzer<JavastackException> { @Override protected FailureAnalysis analyze(Throwable rootFailure, JavastackException cause) {  return new FailureAnalysis("Java技术栈发生异常了……",   "赶快去检查一下吧!",   cause); }}

添加注册:

org.springframework.boot.diagnostics.FailureAnalyzer=\cn.javastack.springboot.features.analyzer.PortInUseFailureAnalyzer,\cn.javastack.springboot.features.analyzer.JavastackFailureAnalyzer

启动输出:

***************************APPLICATION FAILED TO START***************************Description:Java技术栈发生异常了……Action:赶快去检查一下吧!

如果不注册该失败分析器,这个自定义的异常就不会被内置的失败分析器拦截,就会输出大堆的异常信息,使用失败分析器能很直观的看出是什么错误及怎么修复这个错误。

关于启动Spring Boot 项目失败如何解决问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 启动Spring Boot 项目失败如何解决

本文链接: https://lsjlt.com/news/247891.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 启动Spring Boot 项目失败如何解决
    启动Spring Boot 项目失败如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Spring Boot 项目是不是经常失败,显示一大堆的错误信息,如端口重复绑定时...
    99+
    2023-06-06
  • Spring Boot 2.6.x整合Swagger启动失败报错如何解决
    这篇文章主要介绍了Spring Boot 2.6.x整合Swagger启动失败报错如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Boot 2.6.x...
    99+
    2023-06-29
  • 如何解决spring boot项目使用@JsonFormat失效问题
    这篇文章给大家分享的是有关如何解决spring boot项目使用@JsonFormat失效问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用@JsonFormat失效在实体类定义时间格式原因:项目中配置了fa...
    99+
    2023-06-25
  • nginx启动失败如何解决
    这篇文章主要介绍了nginx启动失败如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nginx启动失败如何解决文章都会有所收获,下面我们一起来看看吧。操作首先nginx不是自己部署,要先启动一下docke...
    99+
    2023-06-29
  • wsa启动失败如何解决
    这篇文章主要介绍“wsa启动失败如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“wsa启动失败如何解决”文章能帮助大家解决问题。方法一: 首先打开“设置”接着进入左边栏的“应用”然后进入右上角...
    99+
    2023-07-02
  • docker启动失败如何解决
    Docker启动失败可能有多种原因,以下是一些常见的解决方法: 检查Docker服务是否已启动:在终端中输入sudo servi...
    99+
    2024-04-02
  • spring-boot项目启动迟缓异常排查解决记录
    目录问题背景问题分析假设问题小心求证问题总结问题背景 一个spring boot开发的项目,spring boot版本是1.5.7,携带的spring版本是4.1.3。开发反馈,突然...
    99+
    2024-04-02
  • 利用spring boot如何快速启动一个web项目详解
    前言基于我们创建好的lion项目,使用spring boot,我们就可以通过很少的一些配置,便可以启动这个项目。下面话不多说了,来一起看看详细的介绍吧。方法如下:1 引入Spring boot,我们打开lion父模块的pom文件,继承 sp...
    99+
    2023-05-30
    springboot 快速启动 web项目
  • docker启动mysql失败如何解决
    启动Docker中的MySQL失败可能有多种原因,下面是一些常见的解决方法:1. 查看Docker容器日志:使用`docker lo...
    99+
    2023-09-23
    docker mysql
  • mysql启动失败1067如何解决
    MySQL启动失败1067错误一般是由于MySQL配置文件(my.cnf)中的某些配置项出现问题或者MySQL安装文件损坏导致的。解...
    99+
    2023-08-30
    mysql
  • ubuntu启动mysql失败如何解决
    这篇文章主要介绍了ubuntu启动mysql失败如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ubuntu启动mysql失败如何解决文章都会有所收获,下面我们一起来看看...
    99+
    2022-11-30
    ubuntu mysql
  • 如何解决通过spring-boot-maven-pluginpackage失败问题
    目录1.pom文件示例2.执行mvn package出现异常3.异常堆栈详细信息4.主要问题概述5.解决方案6.修改后pom文件7.再次执行mvn package问题解决总结1.po...
    99+
    2023-05-15
    spring-boot-maven-plugin package失败 spring-boot-maven-plugin package
  • react项目安装失败如何解决
    这篇文章主要讲解了“react项目安装失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react项目安装失败如何解决”吧!react项目安装失败的解决办法:1、在电脑应用中将yar...
    99+
    2023-07-04
  • spring boot项目使用@JsonFormat失效问题的解决
    目录使用@JsonFormat失效原因:项目中配置了fastjson包使用@JsonFormat注解踩过的坑错误原因解决方案使用@JsonFormat失效 在实体类定义时间格式 原...
    99+
    2024-04-02
  • Centos6中Varnish启动失败如何解决
    这篇文章将为大家详细讲解有关Centos6中Varnish启动失败如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Varnish是一款高性能的Web加速器,缓存性能非常好,于是我也学学...
    99+
    2023-06-10
  • Linux httpd apache启动失败如何解决
    本篇内容主要讲解“Linux  httpd apache启动失败如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux  httpd apache启动失败如何解决”...
    99+
    2023-06-10
  • 云主机启动失败如何解决
    云主机启动失败可能有多种原因,可以尝试以下几种解决方法:1. 检查网络配置:确保云主机的网络配置正确,包括IP地址、子网掩码、网关等...
    99+
    2023-09-08
    云主机
  • linux php7-fpm启动失败如何解决
    这篇文章主要介绍“linux php7-fpm启动失败如何解决”,在日常操作中,相信很多人在linux php7-fpm启动失败如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux php7-fp...
    99+
    2023-07-05
  • SpringCloud启动失败问题如何解决
    本篇内容主要讲解“SpringCloud启动失败问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud启动失败问题如何解决”吧!SpringCloud启动失败问题Nac...
    99+
    2023-07-05
  • mysql服务启动失败如何解决
    当MySQL服务启动失败时,可能有多种原因。以下是一些常见的解决方法: 检查MySQL的错误日志,通常位于MySQL安装目录的d...
    99+
    2024-04-09
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作