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目錄下刪除已經快取的專案 重新啟動即可解決
第一次寫部落格 不足之處 多多指教.