java.net.BindException: Address already in use: JVM_Bind

在学习springcloud的过程中,启动项目时报错如下:

2021-07-15 10:01:11.675 DEBUG 1648 --- [  restartedMain] o.s.b.d.livereload.LiveReloadServer      : Starting live reload server on port 35729
2021-07-15 10:01:11.676  WARN 1648 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
2021-07-15 10:01:11.679 DEBUG 1648 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Live reload start error
java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method) ~[na:1.8.0_171]
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) ~[na:1.8.0_171]
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) ~[na:1.8.0_171]
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190) ~[na:1.8.0_171]
    at java.net.ServerSocket.bind(ServerSocket.java:375) ~[na:1.8.0_171]
    at java.net.ServerSocket.<init>(ServerSocket.java:237) ~[na:1.8.0_171]
    at java.net.ServerSocket.<init>(ServerSocket.java:128) ~[na:1.8.0_171]
    at org.springframework.boot.devtools.livereload.LiveReloadServer.start(LiveReloadServer.java:114) ~[spring-boot-devtools-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.startServer(OptionalLiveReloadServer.java:56) [spring-boot-devtools-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.afterPropertiesSet(OptionalLiveReloadServer.java:49) [spring-boot-devtools-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1790) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) [spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
    at org.winter.cloud.Payment8001.main(Payment8001.java:15) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.3.2.RELEASE.jar:2.3.2.RELEASE]

刚开始只关注了Address already in use: JVM_Bind这句话,没有注意这句话上面的日志,于是就以为是服务的端口被占用了,cmd窗口稀里糊涂执行命令就是一顿操作

C:\Users\86187>netstat -ano | findstr "8001"
  TCP    0.0.0.0:8001           0.0.0.0:0              LISTENING       1648
  TCP    [::]:8001              [::]:0                 LISTENING       1648
C:\Users\86187>taskkill /f /pid 1648
成功: 已终止 PID 为 1648 的进程。

结果还是不行,后来才注意到了这句话


才明白了,是因为同时启动了好几个服务,而他们都使用了spring-boot-devtools,

关于LiveReload

spring-boot-devtools提供的另一项特别有用的功能就是LiveReload,常规web开发中,如果修改了css/javascript/html等前端内容,至少得刷新下页面,才能看到最新效果,而LiveReload则可以让开发人员,在任何编辑器中,只要修改了源代码(比如:将某个标题设置成红色),网页就实时做出相应的响应(即:字变红),不需要刷新。

秘密就在于spring-boot-devtools在应用启动时,自带了一个LiveReload Service,参考截图

综上所述,如果同时启动好几个服务,大家都有用spring-boot-devtools,然后都会尝试启动LiveReload Service,但是端口35729只有一个,所以只有第一个会成功,后面启动的服务就会报java.net.BindException,不过,也不会影响整个服务,我们可以选择在配置文件中修改配置:

  1. 手动修改LiveReload的端口
spring:
  devtools:
    livereload:
      port: 35730
  1. 关闭LiveReload
spring:
  devtools:
    livereload:
      enabled: false

参考文章:https://www.cnblogs.com/yjmyzz/p/use-devtools-of-spring-boot-framework.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容