欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-15 09:57:23
...

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

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

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

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

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

一般的解决思路 :

1 打开cmd黑窗口 

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

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

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

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

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

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


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

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

这就奇怪了  

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

那么多日志一条条看   

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

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

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

这.........

于是乎百度  找到了答案  

这是因为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目录下删除已经缓存的项目  重新启动即可解决

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

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