Address already in use: bind端口被占用的多种原因以及解决方案

公司项目用的是dubbo+springMVC+spring+mybatis

项目从git上拉取下来  启动项目:

Address already in use: bind端口被占用的多种原因以及解决方案_第1张图片

日志中报错======>Address already in use : bind

这个错误再熟悉不过了  作为java开发人员应该都遇到过

一般的解决思路 :

1 打开cmd黑窗口 

2 输入命令:   netstat-ano  查找冲突的端口号对应的pid 

3 然后去任务管理器中关闭对应端口的服务即可

Address already in use: bind端口被占用的多种原因以及解决方案_第2张图片

例如上图中的圆圈中的8081是你项目的端口号  对应的pid是3380  

那么你去任务管理器中找到对应pid的服务  状态栏右键选择关闭服务  然后重启elipse中的项目  就可以正常运行了  

Address already in use: bind端口被占用的多种原因以及解决方案_第3张图片


可是我的项目端口号冲突后 :

我去cmd窗口中查找对应的端口号  发现并没有冲突

这就奇怪了  

好吧  就当我眼花了  于是我把tomcat端口换了8082 8083 .....都tm换到8090了一次次重启还是不成功  查找端口号都没有冲突   已疯..... 砸电脑中....半天过去了...........决定吃完午饭  下午慢慢看日志

那么多日志一条条看   

果然发现了一个奇怪的问题:

Address already in use: bind端口被占用的多种原因以及解决方案_第4张图片

项目启动   竟然初始化了两次 

这.........

于是乎百度  找到了答案  

这是因为tomcat的配置中有一个属性appBase="webapps"



什么意思呢: Host标签中配置了appBase属性,tomcat启动就会去加载webapps目录下的所有项目, 下面又配置了标签context,docBase属性, tomcat又会去加载docBase这个路径下的项目, 等于项目又被加载了一次 , 导致端口被占用 加载第一次用了这个端口  加载第二次又用了这个端口; 

解决方案: 把server.xml中的appBase属性置为空  进入tomcat的webapps目录下删除已经缓存的项目  重新启动即可解决

Address already in use: bind端口被占用的多种原因以及解决方案_第5张图片

第一次写博客  不足之处   多多指教.

你可能感兴趣的:(Address already in use: bind端口被占用的多种原因以及解决方案)