Spring Boot 2.4.5中ApplicationArguments无法获取命令行参数问题
问题根本原因
你在调用SpringApplication.run()启动Spring容器时,没有将main方法接收的args命令行参数传入框架,Spring Boot自然不会将参数封装到ApplicationArguments对象中,所以ApplicationRunner的run方法拿到的参数集合为空。你main方法里能正常打印参数是因为你直接遍历的是JVM传入的原始参数,和Spring容器管理的参数对象无关。
修复方案
修改main方法中的启动代码,将args作为第二个参数传入SpringApplication.run:
public static void main(String[] args){ // 新增args参数传入 SpringApplication.run(MainClass.class, args); for (String arg : args) System.out.println("MAIN::::"+arg); }
修复后效果
重新启动应用并传入相同参数后,ApplicationRunner中就能正常获取到所有参数:
- 非选项参数
iamnonoption会被识别到,args.getNonOptionArgs().size()返回1 - 选项参数
app.name、app.hosts会被正常解析,其中app.name会返回["CmdRulez", "2"]的集合,app.hosts会返回["abc,def,ghi"]的集合
内容的提问来源于stack exchange,提问作者Asim
相关产品推荐
相关产品推荐

