springboot如何获取启动命令行参数

springboot如何获取启动命令行参数

1、我们有的场景下可能需要在springboot项目中通过命令行传递参数。那我们应该如何接收这部分参数呢。

在这里插入图片描述

就像上面的图片,传了参数1 2 3。

2、springboot主要接收两种参数

一种是-- 开头的,这一类参数还要区分 是否包含=

在这里插入图片描述

其他的都是另一种,文章开头的 1 2 3。两种参数是可以一起使用的。比如,你可以像下图一样使用

在这里插入图片描述

具体参数的解析在SimpleCommandLineArgsParser类的parse方法中

在这里插入图片描述

3、下面我们来具体看下是如何实现的。
  1. 我们的命令行参数是通过args这个参数传递给springboot的,

在这里插入图片描述

我们点进去这个run方法,看下参数具体是怎么使用的。

在这里插入图片描述

再点进去,发现参数会传递给SpringApplication这个类的run方法,这个run方法也就是springboot整个流程最外层的方法

在这里插入图片描述

在这里插入图片描述

上面图就是整个run方法,和参数相关的位置我都进行了标注。

2.下面分别说明

  • 第1处:这里主要是创建SpringApplicationRunListener监听器,会把参数传递进构造方法。这个接口的用途就不打开来看了。
    在这里插入图片描述

这是一个接口类,随便找个这个类的实现类看下,比如EventPublishingRunListener这个类,就会通过构造方法接收命令行参数。
在这里插入图片描述

这里就会通过args接收这个参数。这个类在每次事件广播时,将参数传递下去。

  • 第2处:这里会创建一个DefaultApplicationArguments对象,将参数作为构造参数传递进去,在构造方法内,还会传递给Source类,同时通过属性来接收参数。

在这里插入图片描述

Source这个类是继承SimpleCommandLinePropertySource这个类,看名字就知道是做命令行参数处理的。

SimpleCommandLinePropertySource这个类会对参数做个简单的数据,返回的是 CommandLineArgs对象,我们传递的args是个数组,它会对每个元素判断是否是–开头,会加到optionArgs这个属性中,如果不是 就加载到nonOptionArgs这个里面。
在这里插入图片描述

而在run方法中prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);这个方法会把这里构造的applicationArguments对象传递给beanFactory

在这里插入图片描述

以后我们需要使用命令行参数,就可以通过自动注入applicationArguments来获取了。

这个ApplicationArguments有4个方法,其中能够返回命令行参数的有4个

第一个返回所有不带–的参数

第二个返回所有带–参数的key

第三个返回具体指定key的值

第四个返回原始的命令行入参数组
在这里插入图片描述

  • 第3处,这里会把参数重新获取出来,封装到环境上下文中,也就是environment里面。加到environment里面的也是个SimpleCommandLinePropertySource对象

在这里插入图片描述

在这里插入图片描述

这样,我们就可以通过参数绑定之类获取到命令行参数

比如命令行传递了个```-name=abc``

在这里插入图片描述

代码中就可以通过参数绑定的方式来获取

在这里插入图片描述

  • 第4处:这里主要是获取容器中ApplicationRunner,CommandLineRunner的所有对象,调用接口方法。这里的接口方法中的参数就是第2处中生成的对象。
    在这里插入图片描述
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值