spring boot項(xiàng)目啟動(dòng)時(shí)如何初始化你想要的資源?
我們?cè)趯?shí)際的開(kāi)發(fā)當(dāng)中,不同的項(xiàng)目會(huì)有不同的需求,有時(shí)候我們?cè)趩?dòng)項(xiàng)目的時(shí)候需要做一些初始化的操作,那么你知道怎么更加便捷的去初始化這些資源呢?
首先,我們?cè)趕pring boot的啟動(dòng)類上,加上兩句話,使項(xiàng)目在啟動(dòng)的時(shí)候控制臺(tái)會(huì)輸出信息,我們看看項(xiàng)目的啟動(dòng)順序是什么?
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
System.out.println("start");
SpringApplication.run(DemoApplication.class, args);
System.out.println("Has already started;");
}
}
然后我們創(chuàng)建一個(gè)類RunnerLoading實(shí)現(xiàn)CommandLineRunner接口:
@Component
public class RunnerLoading implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("When will I start to implement it?");
}
}
現(xiàn)在開(kāi)始啟動(dòng)項(xiàng)目,看看會(huì)出現(xiàn)什么結(jié)果呢?

image.png
根據(jù)控制臺(tái)的打印信息我們可以看出 CommandLineRunner 中的方法會(huì)在 Spring Boot 容器加載之后,在項(xiàng)目啟動(dòng)完成之前執(zhí)行
如果我們?cè)趩?dòng)容器的時(shí)候需要初始化很多資源,并且初始化資源相互之間有序,那如何保證不同的 CommandLineRunner 的執(zhí)行順序呢?那就是使用 @Order 注解。
我們?cè)賱?chuàng)建兩個(gè)類進(jìn)行測(cè)試:
@Component
@Order(1)
public class Runner1 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("我應(yīng)該是初始化資源第一名");
}
}
@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("我應(yīng)該是初始化資源第二名");
}
}
啟動(dòng)項(xiàng)目,看看執(zhí)行結(jié)果:

image.png
通過(guò)控制臺(tái)的輸出我們發(fā)現(xiàn),添加 @Order 注解的實(shí)現(xiàn)類要先執(zhí)行,并且@Order()里面的值越小啟動(dòng)越早,可以修改@Order()里面的值進(jìn)行有順序的初始化資源,你學(xué)會(huì)了嗎?