1. 概述
本篇快速教程将介绍如何向 Spring Boot 应用传递命令行参数。
使用命令行参数可以:
- ✅ 动态配置应用
- ✅ 覆盖 application.properties 中的属性
- ✅ 传递自定义参数
2. Maven 命令行参数
2.1 Spring Boot 1.x
在 Spring Boot 1.x 中,通过 -Drun.arguments
传递参数:
mvn spring-boot:run -Drun.arguments=--customArgument=custom
传递多个参数时需用逗号分隔:
mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom
⚠️ 注意:
- 参数必须以
--
开头 - 多个参数用逗号分隔
- 可覆盖配置属性(如
spring.main.banner-mode
)
2.2 Spring Boot 2.x
Spring Boot 2.x 使用 -Dspring-boot.run.arguments
:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom
3. Gradle 命令行参数
需先在 build.gradle
中配置 bootRun
任务:
bootRun {
if (project.hasProperty('args')) {
args project.args.split(',')
}
}
然后通过 --args
传递参数:
./gradlew bootRun --args=--spring.main.banner-mode=off,--customArgument=custom
4. 覆盖系统属性
命令行参数可覆盖 application.properties
中的属性。例如原配置:
server.port=8081
spring.application.name=SampleApp
覆盖 server.port
的方式:
Spring Boot 1.x:
mvn spring-boot:run -Drun.arguments=--server.port=8085
Spring Boot 2.x:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
⚠️ 注意:
- 命令行参数优先级高于
application.properties
- 可在属性文件中使用占位符简化参数(如
server.port=${port:8080}
) - 需禁用参数转换时(不推荐):
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setAddCommandLineProperties(false); // 禁用命令行参数转换
app.run(args);
}
}
5. 访问命令行参数
在 main()
方法中直接访问参数:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
// 打印所有命令行参数
for (String arg : args) {
System.out.println(arg);
}
SpringApplication.run(Application.class, args);
}
}
这些参数可在应用任何地方使用,不限于启动阶段。
6. 在测试中传递命令行参数
Spring Boot 2.2+ 支持通过 @SpringBootTest
的 args
属性注入测试参数:
@SpringBootTest(args = "--spring.main.banner-mode=off")
public class ApplicationTest {
@Test
public void whenUsingSpringBootTestArgs_thenCommandLineArgSet(@Autowired Environment env) {
Assertions.assertThat(env.getProperty("spring.main.banner-mode"))
.isEqualTo("off");
}
}
7. 总结
本文介绍了在 Spring Boot 中使用命令行参数的关键点:
✅ Maven/Gradle 传递方式
- Maven:
-Drun.arguments
(1.x) /-Dspring-boot.run.arguments
(2.x) - Gradle: 配置
bootRun
任务 +--args
参数
- Maven:
✅ 核心特性
- 覆盖配置属性(优先级最高)
- 支持自定义参数
- 可访问
main()
方法参数
✅ 测试支持
- 通过
@SpringBootTest(args=...)
注入测试参数
- 通过
掌握命令行参数能显著提升 Spring Boot 应用的配置灵活性,尤其适合需要动态调整的环境。