1. -d 参数说明

通过 java -h 查看可知:

[转帖]java -d 参数(系统属性) 和 环境变量_java

注意:
-D= : set a system property 设置系统属性。
如果value是一个包含空格的字符串,则必须将该字符串括在双引号中。
需要设置的是JVM参数而不是program参数
使用此参数的参数优先级最高,会覆盖项目中配置的此项

例如: springboot 项目中的 yaml 配置,可以通过此参数进行覆盖:
-Dspring.datasource.password=123456可以覆盖:

spring:
  datasource:
    password: 123456

2. 其他相关参数

[转帖]java -d 参数(系统属性) 和 环境变量_系统属性_02

3. idea 设置的位置

[转帖]java -d 参数(系统属性) 和 环境变量_环境变量_03


[转帖]java -d 参数(系统属性) 和 环境变量_java_04

4. 系统属性和环境变量的区别

  • 系统属性是指 JVM 中属性变量;环境变量是操作系统层面的变量
// 在java.lang.System这个类中提供了两个方法
getenv() // 获取操作系统中的环境变量
getProperties() // 获取 JVM 中的 系统属性
  • 变量的操作

环境变量的操作有两种方法

  1. 通过windows界面设置 变量会一直存在
  2. DOS命令set设置(这些变量只是在当前DOS环境中存在一旦关闭则消失)
    比如在脚本中添加 set parm=KKKK 则在当前操作界面就可以使用这个变量
    在当前脚本执行的程序中可以通过getenv("parm")来获得其值
    (注意一旦脚本运行完毕 或 DOS窗口关闭则这些的环境变量则也会取消 )

例子:

// 脚本内容
@echo off
set we=k
java zk

// zk.class的源码为
public class zk{
	public static void main(String[] args){
		String value = System.getenv("we");
		System.out.print(value);
	}
}

系统属性操作有两种方法

  1. 在程序中通过setProperty(key,name) getProperty(key)来设置
  2. 第二通过命令或脚本设置
    重点讲解这个因为在一些脚本语言中大家经常会无意见到这些设置
    却不理解是干什么用的,下面通过一个例子演示脚本中的使用
    Java 系统变量主要是用于给main方法传参数

用法如下:

// 命令格式
java -D= xx name:系统属性键 value:值  xx:java命令要运行的类名如果要设置多个参数
java -D= -D= ..xx name

// 脚本内容
@echo off
java -Duu="HelloWorld" ParamTest

// 注意:java -Duu=HelloWord ParamTest 去掉双引号也可以 但值不可包含空格否则
// 会把空格之后作为类名 如 Hello World 则会把World作为类名来处理

// ParamTest.class源码为:
public class ParamTest{
	public static void main(String[] args){
		String param = System.getProperty("uu");
		Systeem.out.print(param);
	}
}
//当在脚本或命令行执行命令时 结果为“HelloWorld”

5. 参考

https://www.jianshu.com/p/eda395fe12d1系统属性和环境变量的区别