SpringBoot如何使⽤Runner实现启动时调⽤?⽤法和原理都在
这⾥
在⽇常的项⽬开发中经常会遇到这样的需求:项⽬启动的时候进⾏⼀些⼀次性的初始化⼯作,如读取加载资源⽂件、或者执⾏其它外部程序。
这个时候我们就可以⽤到spring-boot为我们提供的⼀种扩展机制--Runner。
在spring-boot中提供了两种Runner接⼝:ApplicationRunner和CommandLineRunner,接下来我们就看看他们都是怎么使⽤的Runner的使⽤
要想在我们的项⽬中使⽤ApplicaitonRunner和CommandLineRunner只需要实现如下代码即可:
从代码中我们可以看出使⽤上是⾮常⽅便的,只需要实现相应的接⼝类,然后创建bean即可。上⾯的代码的输出结果为:ApplicaitonRunner和CommandLineRunner相⽐,它们虽然都只有⼀个run接⼝,但是各⾃接收的参数类型却不⼀样,这也是他们唯⼀的区别。
CommandLineRunner的run⽅法接收的是⼀个String类型的可变参数,它的值就是我们main函数接收到的命令⾏参数。
ApplicaitonRunner的run⽅法接收⼀个ApplicationArguments类型的参数,ApplicationArguments会对spring-boot程序的启动参数进⾏解析和分类,把[--{operation-name}={operation-value}]解析操作参数,其它情况被分类为⾮操作参数。
--op1=value1 --op2=value2 arg1 arg2
操作类参数:op1---值为value2,op2---值为value2
⾮操作参数:arg1,arg2
Runner的实现原理
spring-boot的runner扩展的实现也是⾮常的简单的。写过spring-boot程序的朋友⼀定对SpringApplication.run⽅法影响深刻,我们今天讲的runner也是在这个⽅法中被调⽤的。整个调⽤过程:
1. SpringApplication.run调⽤callRunners⽅法
2. 查实现了ApplicationRunner和CommandLineRunner接⼝的Bean,统⼀存放在⼀个list中
3. 根据Bean的order进⾏排序
springframework和springboot4. 循环调⽤每⼀个Runner Bean的run接⼝。
实现过程的核⼼代码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论