关于IDEA与Jar包启动项目添加环境变量参数注意点
IDEA可以给yml配置文件添加参数,也可以给JVM添加参数。通常情况下,命令行参数的优先级 高于 VM系统属性
在启动SpringBoot项目时候,通过 -D 或 -- 添加参数,都可以直接覆盖 yml 或 properties 配置文件中的同名配置,如果不存在则相当于添加了一个配置。
命令行中如何添加JVM环境变量和yml环境变量
-D和--可以混着用,但是需要注意的是,-D参数放在jar包前面,--参数jar包后面,如下所示:
经过测试,命令行中参数重复:命令行参数优先级 > VM环境变量优先级 ,因为命令行参数在后面,会将VM参数覆盖,如下所示:
java -Dserver.port=8002 -Djasypt.encryptor.password=9bcf8cad5bb65c3f -jar oracle-demo-0.0.1-SNAPSHOT.jar --server.port=8001

多个-D和--参数中间使用空格进行分割,如下所示:
java -Dserver.port=8002 -Duser.name=zhangsan -Duser.age=23 -Djasypt.encryptor.password=9bcf8cad5bb65c3f -jar oracle-demo-0.0.1-SNAPSHOT.jar --server.port=8001 --user.sex=男
获取JVM环境变量和命令行参数的值:
/**
* @author zhangzhixi
* @version 1.0
* @description
* @date 2023-12-23 15:56
*/
@RequestMapping("/test")
@RestController
public class TestController {
/**
* 获取配置文件中的值
*/
@Value("${user.sex}")
private String userSex; // 男
/**
* 通过@Value注解获取配置文件中的值
* 既能获取JVM启动参数,也能获取配置文件中的值
*/
@Value("${user.name}")
private String userName; // zhangsan
/**
* 如果JVM启动参数和配置文件中的值重复,优先获取JVM启动参数的值
*/
@Value("${server.port}")
private String serverPort; // 8001
@GetMapping("/config")
public String testConfig() {
Map<String, String> configProperties = new LinkedHashMap<>();
// 获取JVM启动参数的值
configProperties.put("server.port", System.getProperty("server.port"));
configProperties.put("user.name", System.getProperty("user.name"));
configProperties.put("user.age", System.getProperty("user.age"));
// 获取配置文件中的值
configProperties.put("user.sex", userSex);
return JSON.toJSONString(configProperties);
}
}
{
"server.port": "8002",
"user.name": "zhangsan",
"user.age": "23",
"user.sex": "男"
}
IDEA中如何添加JVM环境变量和yml环境变量
经过测试,在IDEA中添加配置,VM环境变量优先级 > 命令行参数优先级
下面设置的yml环境变量--server.port就不会生效,此程序启动将会使用JVM指定的8002作为项目端口


浙公网安备 33010602011771号