概述
CommandLineRunner和ApplicationRunner是Spring Boot所提供的接口,他们都有一个run()方法。所有实现他们的Bean都会在Spring Boot服务启动之后自动地被调用。且经测试,ApplicationRunner的加载优先于CommandlineRunner.由于这个特性,它们是一个理想地方去做一些初始化的工作,或者写一些测试代码。
使用方式:让初始化类实现这两个接口的run()方法,同时将这两个类交给Spring容器管理。
CommandLineRunner
@Component
public class Init implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
String className = this.getClass().getName();
System.out.println("使用" + className + "初始化配置...");
System.out.println(Arrays.toString(args));
System.out.println("使用" + className + "初始化结束...");
}
}
————————————————
加一个虚拟机启动参数
启动查看
这种场景在服务器上特别常用。比如我们想执行某个操作,又不想对外部暴露,此时可以使用CommandLineRunner作为该操作的入口。
ApplicationRunner
ApplicationRunner与CommandLineRunner做的事情是一样的,也是在服务启动之后其run()方法会被自动地调用,唯一不同的是ApplicationRunner会封装命令行参数,可以很方便地获取到命令行参数和参数值。
@Component
public class Init2 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
String className = this.getClass().getName();
System.out.println("使用" + className + "初始化配置...");
System.out.println(args.getOptionValues("param"));
System.out.println("使用" + className + "初始化结束...");
}
}
执行结果:
我们可以发现,通过run()方法的参数ApplicationArguments可以很方便地获取到命令行参数的值。
所以如果你的工程需要获取命令行参数的话,建议你使用ApplicationRunner。
网友评论