Spring Boot 支持通过命令行参数 --server.port=xxx 覆盖配置文件端口,优先级高于 application.properties/yml 但低于环境变量,需双横线格式且启动时正确传入。

Spring Boot 支持通过命令行参数直接覆盖 application.properties 或 application.yml 中配置的端口,无需修改代码或配置文件。只要启动时传入 --server.port=xxx,Spring Boot 会优先采用该值。
命令行参数生效的前提条件
Spring Boot 默认启用命令行参数解析(spring.main.use-system-properties=false 且未显式禁用),所以绝大多数项目开箱即用。关键点:
- 参数必须以
--开头(双横线),这是 Spring Boot 的“命令行参数”格式,区别于 JVM 参数(如-D) - 参数名需符合 Spring Boot 的属性命名规范:
server.port对应ServerProperties类中的字段 - 命令行参数的优先级高于
application.properties、application.yml和 jar 包内配置,但低于环境变量(如SERVER_PORT)和测试上下文中的@TestPropertySource
几种常用启动方式示例
无论使用 Maven、Java 命令还是脚本,只要参数位置正确即可生效:
-
Maven 启动:
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081" -
Java 直接运行 jar:
java -jar myapp.jar --server.port=9090 -
带多个参数:
java -jar myapp.jar --server.port=8082 --spring.profiles.active=prod -
配合 JVM 参数(注意顺序):
java -Xmx512m -jar myapp.jar --server.port=8083(JVM 参数在前,jar 和命令行参数在后)
验证端口是否被成功覆盖
启动日志中会出现明确提示:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
立即学习“Java免费学习笔记(深入)”;
Tomcat started on port(s): 8083 (http) with context path ''
也可在应用启动后访问 http://localhost:8083/actuator/env(需启用 Actuator),查找 server.port 的来源,确认其 value 来自 commandLineArgs 源。
常见问题与注意事项
- 拼写错误:写成
--server.port=后面漏数字,或写成-server.port(单横线)会导致忽略,无报错但不生效 - IDE 启动时需配置:IntelliJ/Eclipse 中需在「Run Configuration」→「Program arguments」栏填写
--server.port=8084,而非 VM options - 若使用
WebMvcTest或@SpringBootTest(webEnvironment = WebEnvironment.NONE),嵌入式容器不启动,端口设置无效 - Spring Boot 2.0+ 中
server.port是通用配置,对 Tomcat、Jetty、Undertow 都适用

















