我们平时使用springboot都是使用main函数直接启动的,例如
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
如果我们想在程序启动之前做一些特殊的处理,springboot为我们提供了两种办法。
一、实现 ApplicationRunner 接口
@SpringBootApplication
public class Application implements ApplicationRunner {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("程序启动之前做一些其他的事情");
}
}
我们可以debug测试,在 SpringApplication.run(Application.class, args); 执行完之前,会执行我们实现的run方法。
二、实现 CommandLineRunner
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println("程序启动之前做一些特殊的处理");
}
}
我们可以发现,这两种方式的效果一样,
不同点是 CommandLineRunner 接口能够访问string数组类型的应用参数。