关于IDEA与Jar包启动项目添加环境变量参数注意点

IDEA可以给yml配置文件添加参数,也可以给JVM添加参数。通常情况下,命令行参数的优先级 高于 VM系统属性

在启动SpringBoot项目时候,通过 -D 或 -- 添加参数,都可以直接覆盖 yml 或 properties 配置文件中的同名配置,如果不存在则相当于添加了一个配置。


命令行中如何添加JVM环境变量和yml环境变量

-D和--可以混着用,但是需要注意的是,-D参数放在jar包前面,--参数jar包后面,如下所示:

经过测试,命令行中参数重复:命令行参数优先级 VM环境变量优先级   ,因为命令行参数在后面,会将VM参数覆盖,如下所示:

1
java -Dserver.port=8002 -Djasypt.encryptor.password=9bcf8cad5bb65c3f -jar oracle-demo-0.0.1-SNAPSHOT.jar --server.port=8001


多个-D和--参数中间使用空格进行分割,如下所示

1
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环境变量和命令行参数的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
 * @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);
    }
}

 

1
2
3
4
5
6
{
    "server.port": "8002",
    "user.name": "zhangsan",
    "user.age": "23",
    "user.sex": "男"
}

IDEA中如何添加JVM环境变量和yml环境变量

经过测试,在IDEA中添加配置,VM环境变量优先级  > 命令行参数优先级

下面设置的yml环境变量--server.port就不会生效,此程序启动将会使用JVM指定的8002作为项目端口

 

posted @   Java小白的搬砖路  阅读(2633)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-09-05 Ajax

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示