问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

【SpringBoot 一】SpringApplication启动类的Args详解

发布网友 发布时间:2024-10-16 07:02

我来回答

1个回答

热心网友 时间:2024-10-16 19:09

传递参数的一种方式,如在启动时使用java -jar --spring.profiles.active=prod或更改自定义配置信息。使用方式是--key=value,其配置优先于项目内部的配置。

在大部分使用SpringBoot进行开发的项目中,启动类的格式通常是SpringApplication.run(SpringBootDemoPropertiesApplication.class, args);然而,在日常使用中,我们似乎很少使用args参数。那么,args参数究竟有什么作用呢?让我们通过源码来一探究竟。

启动一个带有web项目的示例,并在application.yml配置文件中定义一个自定义属性developer.name=test。以下是启动类,其中设置了args参数。

1. Args使用场景一:在run方法中,args第一次出现在SpringApplication类中。getSpringFactoriesInstances(SpringApplicationRunListener.class, types, this, args)方法用于实例化SpringApplicationRunListener的实现类(配置在spring.factories中的实现类)。关于spring.factories的用法,可以参考【SpringBoot 二】spring.factories加载时机分析。此项目中只在spring.factories中找到了一个实现类org.springframework.boot.context.event.EventPublishingRunListener。在实例化的过程中,将两个参数{SpringApplication和String[] args}传递过去。对应到的构造函数如下,并且在EventPublishingRunListener的方法中都有把Args传递下去。

2. Args使用场景二:上述SpringApplicationRunListeners完成后,接下来就到了SimpleCommandLinePropertySource。主要看上面的new Source(args)方法。SimpleCommandLinePropertySource也是一个数据源PropertySource,但它主要是存放命令行属性,例如启动参数Args中的属性就会保存在这个对象中。并且SimpleCommandLinePropertySource会被放入到Environment中,所以也可以通过@link Environment.getProperty(String)来获取命令行的值。看构造函数,可以知道实例化之后的SimpleCommandLinePropertySource是name为commandLineArgs的数据源。属性值的解析规则如下。往下走到了,这个方法的作用就是把我们的Args放到到Spring的environment中;sources.addFirst(new SimpleCommandLinePropertySource(args))。看到方法是addFirst(),这说明什么?说明命令行的数据源被放到了最前面;那么命令行数据源的属性就会被最优先采用。那么我们就可以通过Environment.getProperty(String)获取args中的值了。那么我们可以利用这个args做什么用呢?可以用它来写入配置,并且是覆盖项目中的配置(因为它的优先级更高);例如java -jar --spring.profiles.active=dev。这里就算yml配置的是prod,最终使用的是dev。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在线坐等,西游记片头曲叫什么名字?,劳驾你们 ...想要《西游记》孙悟空大闹天宫时的那个歌曲?,劳驾喽 亲们给个,西游记片头曲叫什么名字?,劳驾大家 希望有亲告诉,西游记片头曲叫什么名字?,劳驾亲们 基金日涨幅0.00%是什么意思? 大盘涨了可是基金增长为0,是什么情况 柯南铃木特快车是哪一集 右腹部靠近腰一阵一阵疼,绞痛不是很剧烈但是频繁_百度拇指医生 铃木特快列车是哪一集 股票美人肩是什么意思 唐山火车站要去哪个客运站做去曹妃甸的车 24寸的拉杆箱可以带到飞机上吗?因为我买的票没有免费托运的行李。 ?钝角是多少度 钝角和锐角怎么区分 为什么在闲鱼里我传的东西全部都下架了,然后还扣了分,现在还不能上传... ...年发生的历史时间的大事年表吗?知道马上回复,有急用,谢谢 1000到1200可买的二手手机 麻花桂鱼怎样制作才能保证其口感和新鲜度? 麻花桂鱼在口感上与其它菜品相比如何? 麻花桂鱼的烹饪细节对于口感的影响有哪些? 麻花桂鱼怎样烹饪才能达到完美的口感? 对于在外面上厕所的时候用一次性马桶垫挺方便的,有什么牌子推荐吗? 壳斗科进化地位 山白树濒危及保护 金缕梅科亲缘关系 相机中的EV、 ISO、快门、白平衡的含义? ...速率一定增大吗?这里的反应速率是正反应速率还是你反应速率还是她们... ...当只升高温度的时候,为什么生成SO3的速率会下降? ...注册表。请与系统管理员联系,以安装Realplayer。” RealPlayer11下载后的视频保存在了哪里?? 为什么在装realplay的时候,安装到一半说“没有权限访问注册表” 腌制花生咸菜的做法 花生黄瓜咸菜的做法 男子酒驾遇查弃车,佯装路人闲逛,被交警逮个正着,这一幕有多好笑? 大水牛能吃小鱼和小虾吗 小朋友问我为什么水牛城鱼虾蟹特别便宜,怎么回答比较妥当? 水牛好老虎一类还是虾一类 怎么评价百度这家公司? 如何评价百度的答题? 泰国国王是世袭制吗 宣城龙泉洞宣城龙泉洞简介 宣城龙泉洞风景区介绍 龙泉洞特色 宣城龙泉洞宣城龙泉洞预订须知 去宣城龙泉洞风景区游玩应该怎么规划路线? 地球引力的形成原因是什么 地球引力的形成原因介绍 有没有特别好的留学app推荐? 哪个app出国留学 出国留学用什么样的电子词典比较好? 大家好!有个不知明号码总是来骚扰我,我已经告知他,他打错电话了,还是无... ...转移号码是我的手机号码怎么样防打过来骚扰电话,加入黑名单也没用...