java程序启动参数严格按命令行>启动脚本>ide配置>构建插件>application.properties顺序生效;java命令中jvm参数必须置于-jar之前,如java -xms512m -dfile.encoding=utf-8 -jar app.jar,-d参数优先于application.properties且影响spring @value注入。

Java程序的启动参数不是“写在哪都生效”,而是严格按加载顺序和作用域生效:命令行 > 启动脚本 > IDE配置 > 构建插件 > application.properties。填错位置,参数直接被忽略。
java命令行里怎么传JVM参数
这是最底层、优先级最高的方式,所有其他配置最终都会转成或等效于这条命令。
-
java后面、-jar前面的部分才是JVM参数,例如:java -Xms512m -Xmx2g -Dfile.encoding=UTF-8 -jar myapp.jar -
-D参数必须在-jar之前,否则会被当成应用参数传给main(String[] args),System.getProperty("xxx")取不到 - 含空格的值(如路径)必须用英文双引号包裹:
-Dlog.path="/data/logs/myapp" -
-Xmx、-XX:+UseG1GC这类参数只对JVM生效,不会进args;而-Dkey=value既影响JVM系统属性,也影响Spring等框架的@Value注入
Spring Boot项目里-D参数和application.properties谁优先
-D参数永远优先于application.properties,哪怕你在application.yml里写了spring.profiles.active: prod,只要启动时加了-Dspring.profiles.active=dev,最终就是dev。
- 这个优先级由Spring Boot的
SpringApplication初始化逻辑决定,它会把JVM系统属性作为最高优先级的PropertySource加入环境 - 但注意:
-D不能覆盖application.properties里定义的@ConfigurationProperties绑定字段,除非该字段明确支持运行时系统属性映射(比如加了@Value("${xxx:default}")) - 生产环境建议统一用
-D控制profile、端口、日志路径等关键变量,application.properties只放默认值和非敏感配置
Maven exec:java插件怎么传JVM和系统参数
mvn exec:java不走java -jar流程,它直接调用main方法,所以JVM参数和系统属性要分开配,且不能混用。
-
<jvmargs></jvmargs>专用于JVM堆、GC、编码等参数:<jvmargs><jvmarg>-Xmx1g</jvmarg><jvmarg>-Dfile.encoding=UTF-8</jvmarg></jvmargs> -
<systemproperties></systemproperties>只传-Dkey=value,对应System.setProperty(),例如:<key>spring.profiles.active</key><value>test</value> - 别试图在
<arguments></arguments>里写-Xmx——它只会变成main方法的String[] args,JVM根本看不到 - 这个配置只影响
exec:java执行过程,对mvn package && java -jar target/xxx.jar完全无效
IDEA里VM Options填错的典型表现
很多人填完没反应,不是参数错了,是根本没生效——因为IDEA的VM Options只作用于当前Run Configuration,且不继承、不跨模块、不参与打包。
- 现象:改了
-Xmx4g但jstat -gc <pid></pid>显示最大堆还是1g → 检查是否选错了Run Configuration,或误填到了“Program arguments”框 - 现象:
System.getProperty("my.config")返回null→ 确认是否用了-Dmy.config=value(带-D),而不是my.config=value - 现象:中文日志乱码,但
-Dfile.encoding=UTF-8已填 → OpenJDK 17+需额外加--add-opens java.base/java.lang=ALL-UNNAMED,否则部分内部API拒绝响应编码设置 - 一个容易被忽略的点:IDEA每次修改VM Options后必须点“Apply”再“OK”,仅点“OK”不保存
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











