spring boot项目启动时如何初始化你想要的资源?
我们在实际的开发当中,不同的项目会有不同的需求,有时候我们在启动项目的时候需要做一些初始化的操作,那么你知道怎么更加便捷的去初始化这些资源呢?
首先,我们在spring boot的启动类上,加上两句话,使项目在启动的时候控制台会输出信息,我们看看项目的启动顺序是什么?
@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;");
}
}
然后我们创建一个类RunnerLoading实现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?");
}
}
现在开始启动项目,看看会出现什么结果呢?
根据控制台的打印信息我们可以看出 CommandLineRunner 中的方法会在 Spring Boot 容器加载之后,在项目启动完成之前执行
如果我们在启动容器的时候需要初始化很多资源,并且初始化资源相互之间有序,那如何保证不同的 CommandLineRunner 的执行顺序呢?那就是使用 @Order 注解。
我们再创建两个类进行测试:
@Component
@Order(1)
public class Runner1 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("我应该是初始化资源第一名");
}
}
@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("我应该是初始化资源第二名");
}
}
启动项目,看看执行结果:
通过控制台的输出我们发现,添加 @Order 注解的实现类要先执行,并且@Order()里面的值越小启动越早,可以修改@Order()里面的值进行有顺序的初始化资源,你学会了吗?