1. 程式人生 > >idea啟動多個tomcat失敗

idea啟動多個tomcat失敗

最大 項目 運行 本地 配置 部署 cat 安裝目錄 結果

Intellij idea中,為在本地調試兩個系統之間的調用,配置兩個本地tomcat server,設置不同的端口號,如8081和8082,Deploy中加入兩個系統各自的Artifact xxx:war, Application context設置為“/“,即訪問地址分別為http://localhost:8081/ 和 http://localhost:8082/ 。

問題來了,分別單獨啟動兩個server時都能成功;但是同時啟動兩個系統時,兩個系統都會出現問題。其中較先啟動的server報錯為:StandardServer.await: Invalid command ” received,然後會有一個系統報出異常,提示找不到xml或者properties等。

尋求解決方法

報出的找不到xml或properties等異常,肯定是誤報,因為單獨啟動時是沒有問題的。

根據StandardServer.await: Invalid command ” received百度或者google,得到的結果基本是端口的問題。但是我已經配置了不同的端口號,除上述的http port外,我還查看了server.xml中的shut down port、ajp port等等,均不相同。大略可以排除端口號的問題。

請教同事,同事解釋Application context不能同為”/”,Intellij會將web發布到tomcat目錄下的ROOT中,兩者必然沖突。提供了兩種解決方案:

  1. Application context區別開,如”/weba/”和”/webb/”
  2. 將tomcat安裝目錄復制一份,用兩套tomcat部署

我恍然同時,又覺得Eclipse完全可以實現啊,Intellij這都實現不了是不是有點low了。

問題解決

最終的最終,我發現了問題所在。在Deploy中加入的Artifact不應該是war,而應該選擇第二種war explored!

搜索了war和war explored的區別。網上大都在討論兩者最大的區別是explored支持熱加載,方便本地修改調試。但是針對本文的問題,沒有找到直接解釋。

自己淺析一下:war理所當然會打為war包,發布時候脫離了你本地項目目錄,發布到了Tomcat目錄\webapps\ROOT下;explored方式,是將web root指向了你的本地項目。因此war形式會產生沖突,而explored方式不會,且explored方式可以熱加載。

轉載自:http://blog.csdn.net/unifirst/article/details/52153950

但經驗證,兩個項目都設置成 war explored還是會報錯,於是只能一個設置成war 另一個設置成war explored。這樣就可以了,還有一種就是設置兩個項目的Application context不能同為”/” 。讓運行的資源分開放。

idea啟動多個tomcat失敗