日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot 項目啟動失敗的解決方案

瀏覽:29日期:2023-07-21 10:54:40

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;/** * A {@code FailureAnalyzer} is used to analyze a failure and provide diagnostic * information that can be displayed to the user. * * @author Andy Wilkinson * @since 1.4.0 */@FunctionalInterfacepublic interface FailureAnalyzer { /** * Returns an analysis of the given {@code failure}, or {@code null} if no analysis * was possible. * @param failure the failure * @return the analysis or {@code null} */ 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 的源碼:

/** * A {@code FailureAnalyzer} that performs analysis of failures caused by a * {@code PortInUseException}. * * @author Andy Wilkinson */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 提供的失敗分析器以友好的錯誤信息和修復建議代替了大堆的錯誤異常信息,可以幫助我們更直觀的定位應用啟動故障,你學會了嗎?

本文的所有示例源代碼都已上傳到了 Github:

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

歡迎大家 Star 關注,后續會不斷更新。

以上就是Spring Boot 項目啟動失敗的解決方案的詳細內容,更多關于Spring Boot 項目啟動失敗的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品久久免费| 欧美a在线观看| 亚洲综合在线电影| 国产成人精品免费视| 日韩高清不卡在线| 亚洲精品高潮| 国产日产高清欧美一区二区三区| 欧美视频二区| 麻豆成人91精品二区三区| 粉嫩av一区二区三区四区五区| 黄色网一区二区| 久久uomeier| 日韩成人亚洲| 亚洲激情中文| 亚洲三级网站| 国产亚洲精品美女久久| 牛牛精品成人免费视频| 国产999精品在线观看| 日韩高清不卡| 亚洲不卡系列| 在线视频精品| 日本午夜精品久久久久| 国产精品最新| 涩涩av在线| 午夜国产精品视频免费体验区| 午夜宅男久久久| 欧美天堂一区二区| 久久三级中文| 激情综合网址| 亚洲理论在线| 欧美激情在线精品一区二区三区| 精品国产亚洲一区二区三区大结局| 日韩久久精品| 亚洲三级视频| 国产精品jk白丝蜜臀av小说| 国产成人77亚洲精品www| 99tv成人| 日本亚州欧洲精品不卡| 精品午夜视频| 欧美性感美女一区二区 | 99久久婷婷| 国产精品美女| 国产精品一区免费在线| 亚洲最新无码中文字幕久久| 欧美特黄一区| 91精品国产经典在线观看| 亚洲永久精品唐人导航网址| www.51av欧美视频| 免费av一区| 精品视频一区二区三区四区五区| 蜜桃视频在线观看一区| 亚洲欧美日韩精品一区二区| 99国产精品久久久久久久| 免费看av不卡| 色综合视频一区二区三区日韩 | 999国产精品永久免费视频app| 日韩在线观看一区二区| 欧美日韩xxxx| 国产高清久久| 久久精品人人| 中文字幕一区二区三区四区久久 | 久久精品国产久精国产| 美女少妇全过程你懂的久久| 欧美一区成人| 欧美成人午夜| 久久激情五月激情| 激情五月综合网| 国产精久久久| av一区二区高清| 久久亚洲资源中文字| 久久福利一区| 欧美香蕉视频| 欧美午夜三级| 蜜臀va亚洲va欧美va天堂| 日韩大片在线播放| 久久狠狠久久| 蜜臀久久久久久久| 久久成人一区| 国产99精品| 日韩久久一区| 久久国产成人| 欧美久久久网站| 在线看片福利| 亚洲一区二区三区四区五区午夜| 亚洲精品综合| 国产一区二区三区不卡av| 999国产精品视频| 国产精品美女午夜爽爽| 亚洲在线免费| 久久精品高清| 国产成人精品福利| 国产乱码精品一区二区三区亚洲人 | 97精品国产99久久久久久免费| 亚洲二区免费| 97人人精品| 精品伊人久久久| 久久黄色影视| 久久精品凹凸全集| 日韩高清在线观看一区二区| 视频精品一区二区| 欧美另类综合| 亚洲成人精品| 三上悠亚国产精品一区二区三区| 精品女同一区二区三区在线观看| 欧美三区不卡| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产伊人久久| 毛片不卡一区二区| 欧美日韩a区| 日韩亚洲精品在线观看| 免费视频久久| 蜜桃伊人久久| 亚洲一区二区免费看| 在线日韩视频| 亚洲午夜av| 美女日韩在线中文字幕| 国产精品啊v在线| 亚洲精品少妇| 亚洲综合中文| 欧美亚洲国产精品久久| 中文字幕成在线观看| 国产福利资源一区| 欧美精品中文| 国产精品免费不| 国产日产一区| 国产精品一区二区精品 | 欧美日韩国产欧| 欧美在线资源| 亚洲少妇自拍| 中文字幕成人| 美日韩精品视频| 快she精品国产999| 日韩中文字幕av电影| 另类激情亚洲| 香蕉久久久久久| 日本成人手机在线| 欧美日韩18| 国产成人久久| 日韩成人亚洲| 亚洲二区精品| 国产欧美日韩精品一区二区免费 | 国产精品白浆| 久久亚洲黄色| 精品日韩一区| 欧美男人天堂| 精品欧美激情在线观看| 视频一区二区三区入口| 日韩高清一区在线| 国产精品尤物| 成人亚洲欧美| 中文日韩欧美| 国产亚洲一区二区三区啪| 国产精品黄色片| 久久影院一区二区三区| 91亚洲国产成人久久精品| 国产综合色区在线观看| 五月天激情综合网| 中文字幕一区二区av| 国产欧美一区二区三区国产幕精品| 国产精品亚洲四区在线观看 | 国产一在线精品一区在线观看| 久久国产精品毛片| 欧美日韩一区二区三区四区在线观看 | 国产毛片久久久| 精品国产精品国产偷麻豆| 午夜国产精品视频免费体验区| 国产精品嫩草影院在线看| 婷婷亚洲成人| 国产精品porn| 韩日一区二区三区| 日韩在线观看中文字幕| 国产精品s色| 欧美日韩在线二区| 国产精品老牛| 国产精品片aa在线观看| 久久久久.com| 日本成人中文字幕| 国产不卡一区| 亚洲精品日本| 国产精品蜜芽在线观看| 久久高清国产| 国产白浆在线免费观看| 国产精品外国| 麻豆久久一区| 国产日韩专区| 国产成人免费| 四虎精品一区二区免费| www成人在线视频| 亚洲精一区二区三区| 极品av在线| 91大神在线观看线路一区| 成人午夜国产| 国产精品伦一区二区| 国产婷婷精品| 欧美国产小视频| 日韩精品乱码av一区二区| 日本在线精品| 麻豆高清免费国产一区| 久久国产66| 久久亚洲国产|