在开发中,经常需要在程序启动前做一些操作,比如:初始化数据,读取配置文件,数据库链接等需求;
Spring Boot 提供了两个接口,解决这种问题。分别是ApplicationRunner 和 CommandLineRunner,这两个接口的工作方式相同,都提供了run方法,都在 SpringApplication.run()完成之前调用;
如果使用了多个这样的实现,可以使用 org.springframework.core.annotation.Order 注解进行执行顺序指定;
实现:
第一个:
@Order(1)
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println(">>> MyCommandLineRunner 执行");
}
}
第二个:
@Order(2)
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(">>> MyApplicationRunner 执行");
}
}
启动类:
@SpringBootApplication
public class SpringBootRunnerApplication {
public static void main(String[] args) {
System.out.println(">>> 开始启动");
SpringApplication.run(SpringBootRunnerApplication.class, args);
System.out.println(">>> 启动完成");
}
}
运行main方法,查看控制台输出:
由日志可以看出,两个run方法在程序启动完成之前执行;
Order的数值越小越先执行;
源码:https://git.dev.tencent.com/lgs_/spring-boot-parent.git