1. 概述
在实际开发工作中,有时需要在项目启动的时候初始化资源,例如:缓存、定时任务等等。
Spring Boot 提供了这样的方案,只要创建 Bean 实现CommandLineRunner或者ApplicationRunner即可。这两个的作用是相同的,只是提供的参数略有不同。
如果存在多个类实现CommandLineRunner或者ApplicationRunner,可以添加 @Order 注解或者实现 Ordered 接口来控制执行顺序。
2. Demo
先创建一个空的 Spring Boot 项目,创建过程就不演示了。
2.1 CommandLineRunner
MyCommandLineRunner实现类,输出args参数
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
String argsStr = String.join(",", args);
System.out.println("===================================================================");System.out.println();
System.out.println("CommandLineRunner:" + argsStr);
}
}
应用程序启动类:
@SpringBootApplication
public class ApplicationRunnerApplication {
public static void main(String[] args) {
SpringApplication.run(ApplicationRunnerApplication.class, args);
System.out.println("SpringApplication.run 执行完毕");
}
}
配置Idea的启动参数
在这里输入“a1 a2 a3”,然后OK保存
最后启动运行程序,输出结果如下:
2.2 ApplicationRunner
创建MyApplicationRunner 类,代码:
@Component
public class MyApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
String argsStr = String.join(",", args.getSourceArgs());
System.out.println("ApplicationRunner:" + argsStr);
}
}
直接运行