• 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;
        }
    }
    

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

  • 相关阅读:
    最全最详尽的ajax教程1
    Mysql笔记(一)
    JAVA基础知识整理(五)
    JAVA基础知识点整理(四)
    JAVA基础知识点整理(三)
    JAVA基础知识点整理(二)
    JAVA基础知识点整理(一)
    JAVA Web知识点整理(六)
    JAVA Web知识点整理(五)
    JAVA Web知识点整理(四)
  • 原文地址:https://www.cnblogs.com/liuyiyuan/p/16366265.html
Copyright © 2020-2023  润新知