转载

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

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

【-D】虚拟机参数

以运行jar包为例,写法为:
# 参数写法为:-Dproperty=value
java -Dserver.port=1234 -jar app.jar
【-D】要放到 -jar 前面,否则参数无效 在idea中通过虚拟机选项这里传递: 1823531-20220611165010714-593996390 代码中可以通过系统属性 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
【--】参数不能放到前面,否则会报错 1823531-20220611165343394-1478437141 在idea中这么传递: 1823531-20220611165353882-1565248139 代码中是通过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;
 }
}
命令行参数与虚拟机参数同名的,以命令行参数优先
正文到此结束
Loading...