spring boot支持通过--key=value命令行参数传递配置,优先级最高,可被@value、@configurationproperties或environment获取;布尔类型支持--flag简写;需注意启动方式与调试技巧。

Spring Boot 支持通过命令行参数向应用传递配置,这些参数会自动注入到 Spring 环境(Environment)中,并可被 @Value、@ConfigurationProperties 或直接通过 ApplicationContext.getEnvironment() 获取。
命令行参数的传递方式
启动应用时,在 java -jar 命令后添加 --key=value 形式的参数即可。注意必须使用双横线(--),这是 Spring Boot 识别外部参数的关键标识:
java -jar myapp.jar --server.port=8081 --app.name=myappjava -jar myapp.jar --logging.level.com.example=DEBUG- 布尔类型可简写:
--feature.enabled(等价于--feature.enabled=true)
在代码中获取命令行参数
有三种常用方式,按推荐顺序排列:
-
@Value 注入:适用于简单、零散的参数
@Value("${app.name:default-name}") private String appName;
冒号后为默认值,避免参数未传时启动失败。 -
@ConfigurationProperties 绑定对象:适合结构化参数(如前缀统一的多个配置)
定义类加@ConfigurationProperties(prefix = "app"),并确保类被@EnableConfigurationProperties或@Configuration扫描到。 -
直接访问 Environment:灵活但不推荐频繁使用
environment.getProperty("server.port", Integer.class, 8080)
参数优先级与覆盖规则
Spring Boot 遵循“后加载者优先”原则。命令行参数属于高优先级来源(默认第12位),会覆盖 application.properties、application.yml 中同名配置。例如:
-
application.yml中写server.port: 8080 - 启动时加
--server.port=9090→ 最终生效的是 9090 - 若同时传多个相同 key(如重复
--app.env=test --app.env=prod),后者生效
进阶技巧:启用参数解析与调试
如果参数没生效,可检查以下几点:
- 确认主类使用了
@SpringBootApplication(它隐含@EnableAutoConfiguration,支持命令行参数) - 启动时加
--debug查看自动配置报告和属性源加载顺序 - 用
spring-boot:run运行 Maven 项目时,需通过-Dspring-boot.run.arguments传参:mvn spring-boot:run -Dspring-boot.run.arguments="--app.name=dev" - IDE(如 IntelliJ)运行配置中,在 “Program arguments” 栏填写
--app.name=test,而非 VM options
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











