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 可以轻松实现:
- 创建
application-dev.properties
:server.port=8081
- 创建
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 会按以下优先级顺序加载端口配置(从高到低):
- 嵌入式服务器编程配置(如
WebServerFactoryCustomizer
) - 命令行参数
- 配置文件(properties/yml)
- 启动类中的
setDefaultProperties
❌ 踩坑提示:当同时存在多种配置方式时,优先级高的会覆盖低的。建议团队统一配置方式,避免混乱。
6. 总结
本文介绍了四种修改 Spring Boot 默认端口的方法:
- 配置文件(最常用)
- 编程式配置(灵活但少用)
- 命令行参数(适合临时场景)
- 多环境隔离(生产必备)
根据实际需求选择合适的方式,示例代码可在 GitHub 获取。