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目录下删除已经缓存的项目 重新启动即可解决
第一次写博客 不足之处 多多指教.
上一篇: 如何使用C语言实现copy拷贝的功能