war包部署到騰訊雲中報404的排錯經歷


項目完成了部分功能,需要把項目放到公網上,方便演示討論。本來以為挺簡單的,直接將war包放到騰訊雲服務器tomcat中,結果報錯404,第一次碰到這種情況,於是想辦法解決,花了一天的時間,終於解決了問題,和大家分享一下解決的過程,希望對大家有所幫助。解決的途徑還是靠百度以及參考資料,分析可能的原因,然后不斷測試,直到問題解決。

一 問題描述

項目使用的開發工具是IntelliJ IDEA,運行web項目程序,在本地進行測試,頁面能夠正常打開並且測試結果符合預期。將web項目程序打成了war包,放到局域網服務器的tomcat的webapps目錄中,然后重新啟動服務器的tomcat,再進行程序功能測試,頁面能夠正常打開並且測試結果符合預期。將war包放到騰訊雲服務器的tomcat的webapps目錄中,重新啟動tomcat,再進行測試,發現404錯誤,不能正常定位到程序頁面。

二 問題分析

由於同一個war包在本地和局域網都能正常運行,而在騰訊雲中不能正常運行,所以分析本機、局域網服務器和騰訊雲服務器之間的區別,查找不同點。首先是考慮是不是騰訊雲的安全機制,對於訪問的端口有限制,騰訊雲服務器確實有端口訪問控制,可以設置開放某些常用端口,比如web服務端口(80,443,8080),SSH登錄端口(22),mysql端口(3306)等,端口放開后,問題依然沒有解決。第二考慮是不是jdk,tomcat的版本問題,jdk使用的版本都是jdk8,具體版本有點差別,修改為統一的版本。Tomcat的版本情況類似,也修改為統一的版本。版本統一后,測試,問題依舊存在。第三,考慮操作系統的不同對程序的影響,本地和局域網都是在windows環境中,tomcat啟動時,都能實時看到tomcat的日志信息,有什么問題一目了然。而騰訊雲用的是centos7,linux操作系統,tomcat啟動后,實時日志信息不能看到,也就不知道tomcat在啟動過程中是否發生了錯誤,為了實時查看tomcat的日志信息,在重啟tomcat后,打開日志文件。

三 問題解決

在linux系統,切換到tomcat的bin目錄,依次鍵入

./shutdown.sh

./startup.sh

重啟tomcat,然后切換到tomcat的logs目錄,鍵入

tail -f catalina.out

就可以實時查看tomcat的日志信息,日志信息比較多,不過錯誤信息也是很明顯的,和用開發工具調試的時候碰到的報錯信息類似,很容易發現。報錯信息的開頭,就是如下的一段。

Unable to register MBean [HikariDataSource (null)] with key 'dataSource'; nested exception is javax.management.InstanceAlreadyExistsException: com.zaxxer.hikari:name=dataSource,type=HikariDataSource

百度了一下,問題解答定位到了StackOverflow網站,不得不說,StackOverflow上的大牛們確實很熱心,有靠譜的回答,試了試,果然管用。

方法就是在配置文件application.properties中,進行如下設置

spring.jmx.enabled=false

重新生成war包,測試,頁面能夠正常打開,功能也都正常。

四 一些未解決的疑惑

雖然問題解決了,但還是有些疑惑的地方,比如同樣的war包,在windows環境中能夠使用,到了linux環境中報錯,具體原因不是太了解。再有就是報錯的大概意思是不能注冊MBean,解決的辦法就是不注冊,直接將jmx設置為false,雖然項目能夠運行,但不知道具體的影響有哪些。這些問題可能還需要在實踐中摸索。

最后希望對大家調試程序有所幫助,如果有大牛對我提出的疑問,有好的解答,也請不吝賜教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM