摘要
有时我们需要在springboot项目启动后初始化某些数据、执行某些方法等等。此时可以通过实现CommandLineRunner或者ApplicationRunner接口完成。
CommandLineRunner接口使用
通过@Component将bean托管给spring
通过@Order设置顺序
@Order(1)
@Component
public class FirstCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... strings) throws Exception {
System.out.println("执行FirstCommandLineRunner");
}
}
ApplicationRunner接口的使用
通过@Component将bean托管给spring
通过@Order设置顺序
@Order(1)
@Component
public class FirstApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
System.out.println("执行FirstApplicationRunner");
}
}
启动过程
private void callRunners(ApplicationContext context, ApplicationArguments args) {
List<Object> runners = new ArrayList();
runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
AnnotationAwareOrderComparator.sort(runners);
Iterator var4 = (new LinkedHashSet(runners)).iterator();
while(var4.hasNext()) {
Object runner = var4.next();
if(runner instanceof ApplicationRunner) {
this.callRunner((ApplicationRunner)runner, args);
}
if(runner instanceof CommandLineRunner) {
this.callRunner((CommandLineRunner)runner, args);
}
}
}
注意事项
- 先执行ApplicationRunner再执行CommandLineRunner
- CommandLineRunner 和ApplicationRunner 是属于springboot项目启动的一部分。如果在CommandLineRunner、ApplicationRunner执行时报错,应用会无法启动