java中通过-dkey=value在java命令后、主类名前设置jvm系统属性,用system.getproperty("key")读取,键名区分大小写,值含空格需加引号,与main方法的args参数完全独立。

Java 中 System.getProperty 可以读取 JVM 启动时通过 -Dkey=value 传入的系统属性,这是最常用、最直接的命令行传参方式。
如何在命令行使用 -D 设置参数
启动 Java 程序时,在 java 命令后、主类名前添加 -Dkey=value 即可。多个参数用空格分隔:
java -Dapp.env=prod -Duser.name=admin MyAppjava -Dconfig.path=/etc/app.conf -Ddebug=true MyApp
注意:-D 必须写在主类名(如 MyApp)之前,否则会被当作程序参数,System.getProperty 就无法获取。
代码中如何读取这些参数
在 Java 代码里调用 System.getProperty("key") 即可获取对应值:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
String env = System.getProperty("app.env"); // 返回 "prod"
String debug = System.getProperty("debug"); // 返回 "true"
String missing = System.getProperty("unknown"); // 返回 null
建议加非空判断,避免 NPE:
-
String env = System.getProperty("app.env", "dev");—— 提供默认值 -
Boolean.parseBoolean(System.getProperty("debug", "false"))—— 安全转布尔
常见注意事项
这些参数本质是 JVM 系统属性,不是环境变量,也不受操作系统环境变量影响:
- 键名区分大小写:
-DPort=8080和-Dport=8080是两个不同属性 - 值中含空格需用引号包裹:
-Dmessage="Hello World" - 不能在运行时修改(
System.setProperty可改,但仅限当前 JVM 进程,且部分 key 被安全管理器限制) - IDE(如 IntelliJ)中需在「Run Configuration → VM Options」里填写
-D...,不是 Program Arguments
和程序参数(args)的区别
-Dkey=value 设置的是系统属性,由 JVM 解析并存入内部属性表;而 java MyApp arg1 arg2 中的 arg1、arg2 是传给 main(String[] args) 的字符串数组,两者完全独立:
-
System.getProperty("foo")← 来自-Dfoo=bar -
args[0]← 来自java MyApp hello中的hello
别混淆用途:配置类参数(如环境、路径、开关)推荐用 -D;业务逻辑输入(如文件名、ID)走 args 更清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










