在开发中,经常需要在程序启动前做一些操作,比如:初始化数据,读取配置文件,数据库链接等需求;
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方法,查看控制台输出:

Spring Boot 启动前数据初始化
由日志可以看出,两个run方法在程序启动完成之前执行;
Order的数值越小越先执行;

源码:https://git.dev.tencent.com/lgs_/spring-boot-parent.git

相关文章: