返回

Spring Cloud 项目服务无法启动,端口 8080 已被占用

后端

解决 Spring Cloud 项目端口占用问题

在开发和部署 Spring Cloud 项目时,端口冲突是一个常见的错误,通常表现为 "端口 8080 已被占用"。本文将指导您逐步排查此问题,并提供具体的解决方案,以确保您的 Spring Cloud 项目服务能够顺利启动和运行。

1. 检查进程占用情况

第一步是确定哪些进程正在占用端口 8080。您可以使用以下命令列出所有监听端口 8080 的进程:

netstat -an | grep 8080

如果看到类似以下的输出,则说明端口 8080 已被另一个进程占用:

tcp6       0      0 :::8080                 :::*                        LISTEN      19131/java

2. 停止占用进程

找到占用端口 8080 的进程后,需要停止该进程。您可以使用以下命令停止 Java 进程:

kill -9 <pid>

其中 <pid> 是占用端口 8080 的 Java 进程的进程 ID。

如果您使用的是 Tomcat 服务器,则可以使用以下命令停止 Tomcat:

shutdown.sh

3. 更改 Spring Cloud 项目的端口

在停止占用端口 8080 的进程后,需要更改 Spring Cloud 项目的端口。您可以在 Spring Boot 配置文件中修改端口号,通常是 application.propertiesapplication.yml 文件。

例如,如果您使用的是 application.properties 文件,则可以将以下行添加到文件中:

server.port=8090

4. 重新启动 Spring Cloud 项目

在更改 Spring Cloud 项目的端口后,需要重新启动项目。您可以使用以下命令重新启动项目:

mvn spring-boot:run

5. 验证服务是否启动成功

重新启动项目后,请检查控制台输出,确保服务已成功启动。您应该看到类似以下的输出:

****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  **
****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  **

 :: Spring Boot ::        (v2.7.3)

2023-03-10 23:39:47.106  INFO 15900 --- [           main] com.example.demo.DemoApplication        : Starting DemoApplication v0.0.1-SNAPSHOT on DESKTOP-73R4C82 with PID 15900
2023-03-10 23:39:47.108  INFO 15900 --- [           main] com.example.demo.DemoApplication        : The following profiles are active: [dev]
2023-03-10 23:39:48.232  INFO 15900 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2023-03-10 23:39:48.377  INFO 15900 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data JPA repository scanning in 139 ms. Found 1 JPA repository interfaces.
2023-03-10 23:39:51.368  INFO 15900 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'applicationEventMulticaster' of type [org.springframework.context.event.ApplicationEventMulticaster] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying).
2023-03-10 23:39:51.418  INFO 15900 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (http)
2023-03-10 23:39:51.421  INFO 15900 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-03-10 23:39:51.421  INFO 15900 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/10.0.27]
2023-03-10 23:39:51.485  INFO 15900 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-03-10 23:39:51.486  INFO 15900 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4320 ms
2023-03-10 23:39:51.570  INFO 15900 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2023-03-10 23:39:52.398  INFO 15900 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2023-03-10 23:39:52.399  INFO 15900 --- [           main] com.example.demo.DemoApplication        : Started DemoApplication in 5.323 seconds (JVM running for 5.632)

常见问题解答

  1. 如何确定哪个进程占用了端口?

使用 netstat 命令列出所有监听端口的进程。进程的 PID 将在输出中提供。

  1. 如何知道哪个 Java 进程占用了端口?

使用 jps 命令列出所有正在运行的 Java 进程。输出中将显示每个进程的端口号。

  1. 如何更改 Tomcat 的端口?

server.xml 文件中查找 Connector 元素。port 属性指定 Tomcat 使用的端口号。

  1. 更改端口后还需要更改哪些配置?

除了更改 Spring Boot 或 Tomcat 的端口配置外,还需要检查是否有其他服务或应用程序依赖于该端口。

  1. 为什么会出现端口冲突?

端口冲突通常是由于其他应用程序或服务在同一台计算机上使用相同的端口造成的。