spring boot 启动错误
Posted
技术标签:
【中文标题】spring boot 启动错误【英文标题】:Spring boot starting error 【发布时间】:2018-10-09 06:05:25 【问题描述】:启动我的 spring-boot 应用程序时出现以下错误。这是我的第一个 spring-boot 项目。所以,我不确定这个错误以及如何解决它。
应用程序启动失败
说明:
配置为侦听端口 8080 的 Tomcat 连接器无法启动。该端口可能已在使用中,或者连接器可能配置错误。
行动:
验证连接器的配置,识别并停止正在侦听端口 8080 的任何进程,或将此应用程序配置为侦听另一个端口。
2018-04-28 21:42:16.248 INFO 13196 --- [lication.main()] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@57ac5b74: startup date [Sat Apr 28 21:42:11 IST 2018]; root of context hierarchy
2018-04-28 21:42:16.249 INFO 13196 --- [lication.main()] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.maven.RunMojo$LaunchRunner.run(RunMojo.java:423)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.boot.context.embedded.tomcat.ConnectorStartFailedException: Connector configured to listen on port 8080 failed to start
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.checkThatConnectorsHaveStarted(TomcatEmbeddedServletContainer.java:222)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:198)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:297)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:145)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.journaldev.elasticsearch.Elastic6Application.main(Elastic6Application.java:12)
... 6 more
【问题讨论】:
看起来一个进程已经使用了 8080。检查lsof -n -i4TCP:8080
【参考方案1】:
运行sudo lsof -i tcp:8080
获取PID,然后使用kill -9 xxxxx
终止进程,其中“xxxxx”是您的PID,现在您可以在端口8080 重新启动您的应用程序
将应用程序的服务器端口更改为 8080 以外的端口。您可以通过转到 application.properties 并键入 server.port = xxxx
来完成此操作,其中 xxxx
是您要运行应用程序的端口。您也可以输入server.port=0
这将分配一个可用的随机端口。您可以在应用程序启动时在日志中找到该端口并在该端口上运行您的应用程序
【讨论】:
【参考方案2】:使用其他端口。在 application.properties 中手动配置端口,如下所示 server.port=8082 或其他端口。
【讨论】:
【参考方案3】:运行lsof -n -i4TCP:8080
查找使用 8080 的进程的 PID。您将得到类似的输出:
COMMAND PID USER FD TYPE NODE NAME
java 72180 hisener 223u IPv6 TCP *:http-alt (LISTEN)
然后运行kill -9 72180
杀死进程。 (将 72180 更改为您的 PID)。
现在,您应该可以运行您的 Spring Boot 应用程序了。
对于windows,相当于上面的命令:
查找使用端口的进程的 PID:netstat -aon | find "8080"
按PID杀死进程:taskkill /F /PID 72180
【讨论】:
【参考方案4】:我假设您已经有一个正在侦听端口 8080 的进程。在您的进程表中查找 java(或其他)进程并将其杀死。当 spring boot 不停止并在后台运行时,有时会发生这种情况
【讨论】:
以上是关于spring boot 启动错误的主要内容,如果未能解决你的问题,请参考以下文章
Eureka Server 在 Spring Boot 中启动时出现错误
清单错误将 spring-boot 启动为 java 应用程序
Spring Boot 错误:由于缺少 EmbeddedServletContainerFactory bean,无法启动 EmbeddedWebApplicationContext