SpringBoot启动命令行参数【-D】和【--】的区别

【-D】和【--】两种写法都可以在命令行传入参数,实现覆盖 application.properties 中的配置项,不过写法有些不同

【-D】虚拟机参数

以运行jar包为例,写法为:

# 参数写法为:-Dproperty=value
java -Dserver.port=1234 -jar  app.jar

【-D】要放到 -jar 前面,否则参数无效

在idea中通过虚拟机选项这里传递:
image

代码中可以通过系统属性 System.getProperties() 获取

public static void main(String[] args) {
    SpringApplication.run(App.class, args);

    // 1234
    System.out.println(System.getProperty("server.port"));

    System.out.println("*****启动成功*****");
}

【--】命令行参数

从main方法的参数传入,springboot会对这种参数进行自动解析
写法为:

java  -jar  app.jar --server.port=4321

【--】参数不能放到前面,否则会报错
image
在idea中这么传递:
image

代码中是通过main函数参数 String[] args 传入
再通过SpringApplication.run(App.class, args)传入springboot进行解析的
可以通过实现 EnvironmentAware接口 注入环境对象,可以读取命令行参数

@SpringBootApplication
public class App implements EnvironmentAware {

    static Environment environment;

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);

        // 1234
        System.out.println(System.getProperty("server.port"));
        // 4321  同名的命令行参数覆盖虚拟机参数
        System.out.println(environment.getProperty("server.port"));

        System.out.println(environment.getProperty("user.dir"));

        System.out.println("*****启动成功*****");
    }
    // 注入环境对象
    @Override
    public void setEnvironment(Environment environment) {
        App.environment = environment;
    }
}

命令行参数与虚拟机参数同名的,以命令行参数优先

posted @ 2022-06-11 16:58  originyuan  阅读(6362)  评论(0编辑  收藏  举报