1. 程式人生 > >Address already in use: bind埠被佔用的多種原因以及解決方案

Address already in use: bind埠被佔用的多種原因以及解決方案

公司專案用的是dubbo+springMVC+spring+mybatis

專案從git上拉取下來  啟動專案:


日誌中報錯======>Address already in use : bind

這個錯誤再熟悉不過了  作為java開發人員應該都遇到過

一般的解決思路 :

1 開啟cmd黑視窗 

2 輸入命令:   netstat-ano  查詢衝突的埠號對應的pid 

3 然後去工作管理員中關閉對應埠的服務即可


例如上圖中的圓圈中的8081是你專案的埠號  對應的pid是3380  

那麼你去工作管理員中找到對應pid的服務  狀態列右鍵選擇關閉服務  然後重啟elipse中的專案  就可以正常運行了  


可是我的專案埠號衝突後 :

我去cmd視窗中查詢對應的埠號  發現並沒有衝突

這就奇怪了  

好吧  就當我眼花了  於是我把tomcat埠換了8082 8083 .....都tm換到8090了一次次重啟還是不成功  查詢埠號都沒有衝突   已瘋..... 砸電腦中....半天過去了...........決定吃完午飯  下午慢慢看日誌

那麼多日誌一條條看   

果然發現了一個奇怪的問題:


專案啟動   竟然初始化了兩次 

這.........

於是乎百度  找到了答案  

這是因為tomcat的配置中有一個屬性appBase="webapps"

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="D:\apache-tomcat-7.0.65\webapps\xxx" path="" reloadable="true" source="org.eclipse.jst.jee.server:xxx"/></Host>

什麼意思呢: Host標籤中配置了appBase屬性,tomcat啟動就會去載入webapps目錄下的所有專案, 下面又配置了標籤context,docBase屬性, tomcat又會去載入docBase這個路徑下的專案, 等於專案又被載入了一次 , 導致埠被佔用 載入第一次用了這個埠  載入第二次又用了這個埠; 

解決方案: 把server.xml中的appBase屬性置為空  進入tomcat的webapps目錄下刪除已經快取的專案  重新啟動即可解決


第一次寫部落格  不足之處   多多指教.