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

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

【-D】虚拟机参数

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

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

【-D】要放到 -jar 前面,否则参数无效 在idea中通过虚拟机选项这里传递:代码中可以通过系统属性 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

【--】参数不能放到前面,否则会报错在idea中这么传递:代码中是通过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;
}
}

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

相关推荐

  • 面向API的数据低代码平台
  • Spring Boot + Canal 实现数据库变化的实时监控
  • 谷歌复用30年前经典算法,CV引入强化学习,网友:视觉RLHF要来了?
  • 大模型在文本生成领域有哪些最新尝试的工作?
  • 聊一聊 Python 的 socket,以及 select、poll、epoll 又是怎么一回事?
  • 百亿数据,如何毫秒级返回?
  • 顶级AI绘图工具——MidJourney,超级详细使用教程!
  • 仅6.1%应届本科生起薪过万; 房地产最终要过渡到取消“预售制”;85岁老人陷“证明你妈是你妈”困境......|酷玩日爆
  • 手机APP的正确打开方式 | 每日一冷
  • 这是对台湾最大的危险!
  • 从这根200多块的翻译笔,你能看到中国电子产业有多卷……
  • 中国开源社区健康案例——OpenI启智社区
  • 俄称美对乌军事支持将达到500亿美元;冲绳民众举行大规模集会;美研究人员:“毒列车”事发地化学物质浓度升高 | 每日大新闻
  • React Native 三大痛点曝光
  • 软件架构的10个质量属性
  • 铲平学校,砍杀师生,中学混混连手榴弹都能搞来?
  • Ambient:Rust编写的高性能多人游戏引擎
  • 地震、死亡,是土耳其自己的“选择”?
  • IM专题:分层架构IM系统(10)—Das领域模型设计
  • 云计算数据库的灾难恢复解决方案是如何演进的?