springframework報錯_應對報錯信息的必殺技!

677f3f4c5383550d1b11210791f8ad48.png

今天遇到了一個錯誤,一般的錯誤提示會很明顯,一看就知道是什么問題。今天遇到的這個說實話真的不好找原因,一般在這種情況下該怎么解決呢?

分享下我的思路吧,不一定是最好的,至少有用。

直接上圖吧,下面是報錯信息:

745d0a622eaa7bb68ab42c596d693097.png

為了方便查看,我把最重要的信息提取出來,如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [com/cxytiandi/kitty/web/config/WebAppConfigurer.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

java.lang.ArrayStoreException這個確實平時很少遇到,看了下源碼,這個是數組存儲異常。比如下圖中我框起來的部分就清楚的表示了在什么場景下會出現這個異常。

b67c512cde55b546238709a02ad83ba8.png

也就是在存儲的時候類型不一致,然后就報錯了唄!

第二個需要關注的錯誤信息是WebAppConfigurer.class,這個還算挺明確的,告訴我哪個類有問題,然后我看了下對應的代碼,也就手動的映射了資源路徑而已。

于是我就想,是不是這里面哪個類加載的時候出問題了,我把WebAppConfigurer直接去掉了,但是并沒什么用,后面還是報的相同的錯誤,只不過是提示另一個類了,就是WebMvcAutoConfiguration。

[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

所以說這些錯誤信息沒能直接定位問題就是這個原因,我們要關注的還是java.lang.ArrayStoreException這個異常,只要找到這個異常發生的地方就能解決了。

下面只能借助于IDEA強大的調試功能了,增加一個Java Exception Breakpoints了。

22c2caa4dfd72d74a861d14fe9a7a1bf.png

然后debug模式重啟,果不其然就報錯的時候就進斷點了。

80e4c6bb3ee2481e92e5a3652018e802.png

e1d2eabe5993355d0623fb2aa951109e.png

這下終于找到原因了,parseClassValue的時候出問題了,Class就是

org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClientAutoConfiguration。

這個類是我當時在Sleuth中擴展Sentinel對Feign支持的時候做了一些修改,沒想到居然出了Bug。

下面給大家說明下真正的原因吧,在這個擴展模塊中sentinel的依賴是可選的,如下:

0062b5bee4b06a8e5ade8b4eeb9f9036.png

剛好報錯的項目中不需要用到Sentinel,但是用到了Sleuth和Feign,所以TraceFeignClientAutoConfiguration生效了。主要還是Conditional都滿足條件了。

1ef7cb0355bf01e58a0a6503e1db2cf3.png

項目中又沒顯示指定依賴Sentinel,這個類自然加載失敗。

所以解決辦法就是要么加Sentinel依賴,要么就是在@ConditionalOnClass中加上Sentinel的類,這樣只有當在Sentinel的類在classpath中存在的時候才會加載,如果項目沒依賴Sentinel那么就不加載,這樣就沒問題了。

26eb161441dd0e7b9e0689b952958a9b.png
原作者姓名:毛橘
原出處:博客園
原文鏈接:當報錯信息看不出原因時,應該怎么辦?教你一招必殺技! - 毛橘 - 博客園

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532093.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦運行卡頓怎么處理_【眾點學】電腦運行PS卡頓?可能是你的虛擬內存沒設置好!...

不少小伙伴都遇到過這樣的煩惱明明自己的電腦擁有大內存PS用著用著就卡頓了經過教體君的仔(bai)細(du)研(yi)究(xia)發現原來電腦的 虛擬內存 只有2G當我們用大型軟件或玩大型游戲電腦越用越卡時該怎么做?今天【眾點學】我們一起來看看Win7和Win10系統下分別如何設置…

線程池拒絕策略 開發中常用什么策略_面試官:說說你知道多少種線程池拒絕策略...

往期文章為什么阿里Java規約要求謹慎使用SimpleDateFormathttps://www.toutiao.com/i6696127929048367629/為什么我強烈推薦你用枚舉來實現單例模式https://www.toutiao.com/i6696861933687013901/為什么不要在MySQL中使用UTF-8編碼方式https://www.toutiao.com/i6697966437727…

css html 雙面打印_從 Linux 命令行進行打印 | Linux 中國

導讀:在 Linux 命令行進行打印的內容比單單一個 lp 命令多得多,讓我們來看一些可用選項。       本文字數:4305,閱讀時長大約:5分鐘https://linux.cn/article-13012-1.html作者:Sandra Henry-stocker譯…

python保存快捷鍵是什么_python常用快捷鍵

最重要的快捷鍵1. ctrlshiftA:萬能命令行2. shift兩次:查看資源文件新建工程第一步操作1. module設置把空包分層去掉,compact empty middle package2. 設置當前的工程是utf-8,設置的Editor-->File Encodings-->全部改成utf-8,注釋1. ctrl/:單行注釋光標操作1. ctrlaltent…

服務器內存超限問題_服務器內存爆滿最佳處置方案

內存爆滿截圖:分析:內存持續飆升,應該是有大量內存一直沒有釋放,考慮僵尸對象,僵尸進程,最簡單的就是重啟服務器,但是就無法找到罪魁禍首了。驗證:top命令查看活躍進程的資源使用情況…

js map對象遍歷_何時使用 Map 來代替變通的 JS 對象

JS 普通對象 {key: value} 用于存放結構化數據。但有一件事我覺得很煩:對象鍵必須是字符串(或很少使用的 symbol)。如果將數字用作鍵會怎樣?在這種情況下不會有錯誤:const names { 1: One, 2: Two,};Object.keys(names); // > [1, 2]JS 會隱式地將…

mysql怎么顯示結果窗口_mysql8中窗口函數

在以前的MySQL版本中是沒有窗口函數的,直到MySQL8.0才引入了窗口函數。窗口函數是對查詢中的每一條記錄執行一個計算,并且這個計算結果是用與該條記錄相關的多條記錄得到的。1.窗口函數與聚合函數窗口函數與聚合函數很像,他們都是在一組記錄而…

python控制臺輸入字符串作為參數_Python-如何將字符串傳遞到subprocess.Popen(使用stdin參數)?...

小編典典Popen.communicate() 說明文件:請注意,如果要將數據發送到進程的stdin,則需要使用stdin PIPE創建Popen對象。同樣,要在結果元組中獲得除None以外的任何內容,你還需要提供stdout PIPE和/或stderr PIPE。替換…

log4jdbc mysql_[簡單]log4jdbc-log4j2配置簡記_MySQL

log4jdbc-log4j2,就不多說了,不了解的可以谷歌,附上log4jdbc-log4j2的官方鏈接:https://code.google.com/p/log4jdbc-log4j2/ ,上面有非常詳細的介紹。簡單的貼下配置文件,其他的見附件:databas…

vb實時錯誤6 溢出_java內存溢出系列(6): Out of swap space?

本文是java內存溢出系列第6小篇。JVM啟動參數指定了最大內存限制。如 -Xmx 以及相關的其他啟動參數. 假若JVM使用的內存總量超過可用的物理內存, 操作系統就會用到虛擬內存。錯誤信息 java.lang.OutOfMemoryError: Out of swap space? 表明, 交換空間(swap space,虛擬內存) 不…

java備份還原mysql數據庫_Java備份還原Mysql數據庫

///實體類package com.ews.util;/*** 系統備份展示對象** */public class DataFile {private String fileName;//備份文件的名稱private String fileDate;//備份文件的日期private String filePath;//備份文件的地址private String fileSize;//備份文件的大小public String get…

學pyqt5之前需要學python嗎_快速學習pyqt5(1)--入門

學習于:PyQt5圖形界面編程 想要系統學習的同學建議可以去這個專欄好好學習,沒有任何語言基礎和計算機基礎的也建議直接去看那個專欄。我這里是有java基礎了,所以就不重復,針對快速學習使用。學習這個的目的是完成學校的SIT項目&am…

reboot mysql fail_mysql 5.7.18,在系統重啟后,為什么無法啟動?

度娘也不給力,只好自己研究了。先把結論寫出來吧。把pid文件換個位置,就好了。問題是, mysqld.servce的文件是從mysql的安裝目錄拷貝的,導致沒有懷疑pid文件位置的問題。一開始還懷疑是不是自己在一些文件里拼寫有誤。后來&#x…

mysql 查看鎖_別吵吵,分布式鎖也是鎖

Tomcat是這個系統的核心組成部分, 每當有用戶請求過來,Tomcat就會從線程池里找個線程來處理,有的執行登錄,有的查看購物車,有的下訂單,看著屬下們盡心盡職地工作,完成人類的請求,Tom…

php解析js的 arraybuffer_JS的所謂的第七種數據類型Symbol

首先,為什么說叫所謂呢?因為在2007年之前Js給予我們typeof解析數據類型的一共有六種(一直有爭議,但是我們暫時就按typeof來算)functionNumberObjectbooleanStringundefined但當我們去 typeof Symbol () 的時候,會驚奇的發現&#…

JAVA MYSQL從數據庫中提取圖片_java web將圖片存到儲數據庫和從數據庫中讀取圖片...

(Notice:以下所有經驗也是我根據網上的經驗整理的,如有侵權可以聯系我刪除,Wx:IT_Ezra,QQ 654303408。 有問題討論也可聯系我,QQ同上。)一、分析一下基本流程從前臺頁面獲取圖片,后臺接收圖片文件轉化成數據…

Ubuntu系統如何安裝和卸載CUDA和CUDNN

背景 最近在學習PaddlePaddle在各個顯卡驅動版本的安裝和使用,所以同時也學習如何在Ubuntu安裝和卸載CUDA和CUDNN,在學習過程中,順便記錄學習過程。在供大家學習的同時,也在加強自己的記憶。本文章以卸載CUDA 8.0 和 CUDNN 7.05 …

session.merge 緩存不更新_如何保證緩存與數據庫雙寫時的數據一致性?

在做系統優化時,想到了將數據進行分級存儲的思路。因為在系統中會存在一些數據,有些數據的實時性要求不高,比如一些配置信息。基本上配置了很久才會變一次。而有一些數據實時性要求非常高,比如訂單和流水的數據。所以這里根據數據…

java替換圖片中文字_Java 添加、替換、刪除Word中的圖片

文檔中,可以通過圖文混排的方式來增加內容的可讀性,相比純文本文檔,在內容展現方式上也更具美觀性。在給文檔添加圖片時,可設置圖片的文本環繞方式、旋轉角度、圖片高度/寬度等;另外,也可對文檔中已有的圖片…

kafka如何保證不重復消費又不丟失數據_Kafka寫入的數據如何保證不丟失?

我們暫且不考慮寫磁盤的具體過程,先大致看看下面的圖,這代表了 Kafka 的核心架構原理。Kafka 分布式存儲架構那么現在問題來了,如果每天產生幾十 TB 的數據,難道都寫一臺機器的磁盤上嗎?這明顯是不靠譜的啊!所以說,這…