Spring中的CommandLineRunner、ApplicationRunner 接口

CommandLineRunner、ApplicationRunner 接口是在容器启动成功后的最后一步回调(类似开机自启动)。

CommandLineRunner接口

官方doc:

Interface used to indicate that a bean should run when it is contained within a SpringApplication. Multiple CommandLineRunner beans can be defined within the same application context and can be ordered using the Ordered interface or Order @Order annotation.
接口被用作将其加入spring容器中时执行其run方法。多个CommandLineRunner可以被同时执行在同一个spring上下文中并且执行顺序是以order注解的参数顺序一致。

If you need access to ApplicationArguments instead of the raw String array consider using ApplicationRunner.
如果你需要访问ApplicationArguments去替换掉字符串数组,可以考虑使用ApplicationRunner类。

先看一个demo:
定义一个ServerStartedReport实现CommandLineRunner,并纳入到srping容器中进行处理

 

 定义一个ServerSuccessReport实现CommandLineRunner,并纳入到spring容器处理

 

启动类测试,也可以直接在spring容器访问该值:

配置参数,然后执行启动类:

打印结果

 

 

ApplicationRunner接口

 

发现二者的官方javadoc一样,区别在于接收的参数不一样。CommandLineRunner的参数是最原始的参数,没有做任何处理。ApplicationRunner的参数是ApplicationArguments,是对原始参数做了进一步的封装。

ApplicationArguments是对参数(main方法)做了进一步的处理,可以解析--name=value的,我们就可以通过name来获取value(而CommandLineRunner只是获取--name=value)

 

 可以接收--foo=bar这样的参数。

--getOptionNames()方法可以得到key的集合。
--getOptionValues(String name)方法可以得到key对应的value集合。

看一个demo:
定义DemoApplicationRunner类继承ApplicationRunner接口:

 

配置参数启动:

打印结果:

posted on 2022-05-07 17:10  潘大炮  阅读(470)  评论(0编辑  收藏  举报