springboot給我們提供了兩種“開機啟動”方式:ApplicationRunner和CommandLineRunner。
這兩種方法提供的目的是為了滿足,在項目啟動的時候立刻執(zhí)行某些方法。我們可以通過實現(xiàn)ApplicationRunner和CommandLineRunner,來實現(xiàn),他們都是在SpringApplication 執(zhí)行之后開始執(zhí)行的。
CommandLineRunner接口可以用來接收字符串?dāng)?shù)組的命令行參數(shù),ApplicationRunner 是使用ApplicationArguments 用來接收參數(shù)的。
CommandLineRunner :
@Component
public class MyCommandLineRunner implements CommandLineRunner{
@Override
public void run(String... var1) throws Exception{
System.out.println("This will be execute when the project was started!");
}
}
ApplicationRunner :
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner class will be execute when the project was started!");
}
}
這兩種方式的實現(xiàn)都很簡單,直接實現(xiàn)了相應(yīng)的接口就可以了。
記得在類上加@Component注解。
如果想要指定啟動方法執(zhí)行的順序,可以通過實現(xiàn)org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解來實現(xiàn)。
以ApplicationRunner 為例來分別實現(xiàn)。
Ordered接口:
@Component
public class MyApplicationRunner implements ApplicationRunner,Ordered{
@Override
public int getOrder(){
return 1;//通過設(shè)置這里的數(shù)字來知道指定順序
}
@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}
}
Order注解實現(xiàn)方式:
@Component
@Order(value = 1)
public class MyApplicationRunner implements ApplicationRunner{
@Override
public void run(ApplicationArguments var1) throws Exception{
System.out.println("MyApplicationRunner1!");
}
}