应用初始化完执行某些方法

摘要

有时我们需要在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执行时报错,应用会无法启动
发布了22 篇原创文章 · 获赞 27 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014395955/article/details/103803422
今日推荐