在平时的开发中可能遇到这样的问题,在springboot 容器启动之后执行特定的方法或者类。
Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner。这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。他们都是在SpringApplication 执行之后开始执行的。
这两个接口中有一个run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:
ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。
下面通过两个简单的例子,来看一下这两个接口的实现。
两个类的配置情况如下所示,order数字越小,启动的优先级越高
@Component
public class MyCommandLineRunner implements CommandLineRunner, Ordered {
@Override
public void run(String... args) {
System.out.println("run MyCommandLineRunner ======================>");
Arrays.stream(args).forEach(System.out::println);
System.out.println("启动");
}
@Override
public int getOrder() {
return 3;
}
}
@Component
@Order(2)
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("run MyApplicationRunner ======================>");
Arrays.stream(args.getSourceArgs()).forEach(System.out::println);
System.out.println(args);
}
}
启动参数配置:
启动结果: