1. 概述

Spring Boot 为大多数配置属性提供了合理的默认值。但实际开发中,我们经常需要根据具体场景覆盖这些默认值。

修改嵌入式服务器的默认端口 就是一个常见需求。本文将介绍几种简单粗暴的实现方式,帮你快速搞定端口配置问题。

2. 使用配置文件

最直接的方式就是通过配置文件覆盖默认属性。**控制端口的核心属性是 server.port**。

默认情况下,Spring Boot 应用启动在 8080 端口。我们只需在 application.properties 中添加:

server.port=8081

现在应用就会在 8081 端口启动。如果使用 YAML 格式,在 application.yml 中这样写:

server:
  port: 8081

关键点:这些文件放在 Maven 项目的 src/main/resources 目录下会被自动加载。

2.1. 环境隔离的端口配置

实际项目中,不同环境(开发/测试/生产)通常需要不同端口。结合 Spring Profile 可以轻松实现:

  1. 创建 application-dev.properties
    server.port=8081
    
  2. 创建 application-qa.properties
    server.port=8082
    

通过激活不同 profile(如 --spring.profiles.active=dev)即可切换端口。这种方式能满足大多数场景,但还有其他方案值得了解。

3. 编程式配置

通过代码也能动态设置端口,主要有两种方式:

方式一:在启动类中设置属性

@SpringBootApplication
public class CustomApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(CustomApplication.class);
        app.setDefaultProperties(Collections
          .singletonMap("server.port", "8083"));
        app.run(args);
    }
}

方式二:自定义 Web 服务器工厂

@Component
public class ServerPortCustomizer 
  implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
 
    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        factory.setPort(8086);
    }
}

⚠️ 注意:以上代码适用于 Spring Boot 2.x。如果是 1.x 版本,需要实现 EmbeddedServletContainerCustomizer 接口。

4. 使用命令行参数

打包成 JAR 运行时,可以通过命令行参数动态指定端口:

java -jar spring-5.jar --server.port=8083

或者使用 JVM 参数形式:

java -jar -Dserver.port=8083 spring-5.jar

这种方式特别适合临时测试或容器化部署场景。

5. 配置优先级

Spring Boot 会按以下优先级顺序加载端口配置(从高到低):

  1. 嵌入式服务器编程配置(如 WebServerFactoryCustomizer
  2. 命令行参数
  3. 配置文件(properties/yml)
  4. 启动类中的 setDefaultProperties

踩坑提示:当同时存在多种配置方式时,优先级高的会覆盖低的。建议团队统一配置方式,避免混乱。

6. 总结

本文介绍了四种修改 Spring Boot 默认端口的方法:

  • 配置文件(最常用)
  • 编程式配置(灵活但少用)
  • 命令行参数(适合临时场景)
  • 多环境隔离(生产必备)

根据实际需求选择合适的方式,示例代码可在 GitHub 获取。


原始标题:How to Change the Default Port in Spring Boot | Baeldung