SpringBoot第二次启动不成功,报错: java.net.BindException: Address already in use: bind

本文介绍了一个常见的SpringBoot应用启动失败的问题,即因端口被占用导致的启动错误,并提供了解决方案。通过结束占用相应端口的进程,能够使应用正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot 第二次启动不成功 报错:

java.net.BindException: Address already inuse: bind

         atsun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_73]

         atsun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_73]

         atsun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_73]

         atsun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)~[na:1.8.0_73]

         atsun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_73]

         atorg.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210)~[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:990)~[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:635)~[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.apache.catalina.connector.Connector.startInternal(Connector.java:1022)[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.apache.catalina.core.StandardService.addConnector(StandardService.java:225)[tomcat-embed-core-8.5.16.jar:8.5.16]

         atorg.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:250)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:193)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:297)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:145)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]

         atorg.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.SpringApplication.run(SpringApplication.java:303)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1118)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1107)[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]

         atcom.hrf.Application.main(Application.java:10) [classes/:na]

         atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]

         atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0_73]

         atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_73]

         atjava.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]

         atcom.intellij.rt.execution.application.AppMain.main(AppMain.java:147)[idea_rt.jar:na]

 

解决方法:

Ctrl+Alt+Delete打开任务管理器,将java.exe*32 这些删掉,就可以~

 

再次启动,终于成功^-^!此时可以打开浏览器http://localhost:8080/出现

Whitelabel Error Page

This application has no explicit mappingfor /error, so you are seeing this as a fallback.

Wed Sep 06 10:48:10 CST 2017

There was an unexpected error (type=NotFound, status=404).

No message available

 

 

 

### Java中 `java.net.BindException: Address already in use` 异常的原因与解决方案 #### 一、异常原因 当发生 `java.net.BindException: Address already in use` 错误时,通常是由于尝试绑定到某个已被占用的网络端口所引起的。具体来说,操作系统允许两个进程同时监听同一个 IP 地址和端口号组合[^2]。 常见的触发场景包括但限于以下几种情况: 1. **同一应用多次运行**:如果当前程序已经有一个实例正在运行并占用了指定端口,则再次启动会引发此错误。 2. **其他服务占用端口**:除了本程序外,还有别的软件也在使用相同的端口资源。 3. **未完全释放连接**:即使之前的应用关闭了,但由于某些底层机制(如 TIME_WAIT 状态),端口可能暂时可用。 4. **容器环境下的特殊配置问题**:例如,在 Docker 或虚拟化环境中可能会因为 TCP 动态端口分配策略而导致冲突[^5]。 #### 二、排查方法 为了定位哪个具体的进程占据了目标端口,可以通过命令行工具来查找相关信息: 对于 Windows 用户而言, ```batch netstat -ano | findstr :<port_number> ``` 而对于 Linux/MacOS 平台则可采用如下方式查询: ```bash lsof -i:<port_number> # 或者也可以通过 netstat 实现相同功能 sudo netstat -tulnp | grep :<port_number> ``` 其中 `<port_number>` 是指代实际出现问题的那个端口号,比如上面提到的例子中的 “8080”。执行这些指令后可以获得对应 PID (Process ID),进而决定如何处理干扰源——要么终止那个进程 (`taskkill /PID <pid_value> /F`) ,要么更改自己项目的默认设置以避开竞争激烈的区域[^4]。 #### 三、解决措施 针对同类型的状况提供了多种应对策略: ##### 方法 A 更改应用程序使用的端口 最简单直接的方式就是修改服务器或者框架内部定义的服务地址参数值。如果是基于 Spring Boot 构建的话,那么可以在 application.properties 文件里调整 server.port 属性;而在 Tomcat 中则是编辑 conf/server.xml 文档内的 Connector 节点属性 port="..." 部分[^3]。 ##### 方法 B 杀死抢占端口的任务 一旦确认妨碍因素来自于外部独立实体而非自身重复部署行为所致的情况下,可以直接结束掉那些必要的后台作业以便腾出空间给新来的请求接入进来[^4]。 ##### 方法 C 设置 SO_REUSEADDR 参数 有时候即便原主人早已消失见但仍需等待一段时间才能重新启用旧有链接的情况存在。此时可以考虑激活 socket option 'SO_REUSEADDR' 让系统尽快回收闲置资产供即时利用[^1]。 示例代码片段展示如何实现这一点: ```java ServerSocket ss = new ServerSocket(); ss.setReuseAddress(true); ss.bind(new InetSocketAddress(port)); ``` ##### 方法 D 修改操作系统的动态端口范围 特别是在涉及到复杂计算模型或是频繁短时间交互业务逻辑设计之时,适当扩大可用区间有助于减少碰撞几率。于 windows 上可通过注册表路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下新增名为 MaxUserPort DWORD 类型项并将数值设得更大一点达成目的[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值