管理后臺老項目 SSM 框架,任何請求均返回錯誤碼 500
1. 出現(xiàn)問題
- 管理后臺使用:Struts2 + Spring + MyBatis 框架,在某次測試平臺重啟后,啟動成功未拋出異常,但是任何請求均返回錯誤碼 500
2. 解決過程
1. 查看日志
- 首先登錄測試平臺 Linux 環(huán)境,手動調(diào)用一次,然后查看調(diào)用異常日志
cd 目錄
-
tail -f 日志.log
,如果日志量比較大可以使用tail -f 日志.log | grep -C 20 'Exception'
- 發(fā)現(xiàn)沒有拋出異常
- 然后詳細(xì)去看調(diào)用過程,發(fā)現(xiàn) Action 正常處理了
- 由于問題之前未出現(xiàn)過,因此嘗試重啟一次,仍未能解決,然后重啟上一次分支,仍然是相同問題
2. 猜測配置有問題
- 首先猜測是發(fā)布配置問題,這個項目是 Struts2 + Spring + MyBatis 的老框架,使用 war 包 + Tomcat 部署
- 進目錄
cd /Java/servers/xxx/conf
,查看 server.xml 配置 - 發(fā)現(xiàn) war 包目錄為:
<Context docBase="/xxx/Java/deploy/master"
,對應(yīng)目錄下查看文件是正常的 - 其次覺得是否是響應(yīng)端口被占用,還是在 server.xml 中查到
<Connector port="9xxx" protocol="HTTP/1.1" connectionTimeout="xxx" redirectPort="8xxx" />
<Connector port="8xxx" protocol="AJP/xxx" redirectPort="xxx" />
- 使用
lsof -i:redirectPort 的值
命令,發(fā)現(xiàn)端口未被占用 - 最后嘗試改為其他接口,發(fā)現(xiàn)任何接口均返回 500,與配置無關(guān)
3. 根據(jù)架構(gòu)圖確定問題
-
根據(jù)添加日志顯示,Action 執(zhí)行沒問題,查表也有數(shù)據(jù),應(yīng)該是 Struts2 過程中出現(xiàn)的問題
-
因此根據(jù) struts2 架構(gòu)
-
應(yīng)該是過濾器或者攔截器后處理的時候出現(xiàn)的問題
-
代碼搜索 struts.xml,發(fā)現(xiàn)僅有自定義攔截器
-
<interceptors> <interceptor name="xxxInterceptor" class="XxxInterceptor" />
-
查看攔截器 XxxInterceptor.java 代碼,發(fā)現(xiàn)日志打印到了其他目錄(真坑…)
-
找到對應(yīng)目錄再進行第一步查看日志
-
發(fā)現(xiàn)在 Action 獲取結(jié)果后,攔截器后置代碼,發(fā)生了類加載異常,具體去看發(fā)現(xiàn)是解析從配置中心獲取的 Json 錯誤文章來源:http://www.zghlxwxcb.cn/news/detail-404749.html
-
至此,問題已經(jīng)找到,配置中心 Json 被人改錯了文章來源地址http://www.zghlxwxcb.cn/news/detail-404749.html
3. 解決方案
- 將配置改成正確的 Json 格式數(shù)據(jù),其次在自定義攔截器業(yè)務(wù)里加異常捕獲與規(guī)范日志目錄
- 啟示:測試環(huán)境的配置也要謹(jǐn)慎修改,并且如果發(fā)生詭異的異常,可以嘗試回顧今天的操作
到了這里,關(guān)于管理后臺老項目 SSM 框架,任何請求均返回錯誤碼 500的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!