实现系统启动任务
两个类
CommandLineRunner
ApplicationRunner
1. CommandLineRunner
@Component
@Order(99) //数字越小,优先级越大,默认情况下,优先级的值为Integer.MAX_VALUE,表示优先级最低
public class MyCommandLineRunner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("mycommandLineRunner2>>>"+ Arrays.toString(args));
}
}
此时启动项目,run方法就会被执行,至于参数,可以通过两种方式来传递,如果是在 IDEA 中,可以通过如下方式来配置参数:
另一种方式,则是将项目打包,在命令行中启动项目,然后启动时在命令行传入参数,如下:
java -jar
devtools-0.0.1-SNAPSHOT.jar 三国演义 西游记
注意,这里参数传递时没有key,直接写value即可,执行结果如下:
ApplicationRunner
ApplicationRunner 和 CommandLineRunner 功能一致,用法也基本一致,唯一的区别主要体现在对参数的处理上,ApplicationRunner 可以接收更多类型的参数(ApplicationRunner 除了可以接收 CommandLineRunner 的参数之外,还可以接收 key/value形式的参数)。
@Component
@Order(98)
public class MyApplicationRunner1 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
//args.getNonOptionArgs可以用来获取命令行中无key参数
List<String> nonOptionArgs = args.getNonOptionArgs();
System.out.println("MyApplicationRunner1>>>"+nonOptionArgs);
//args.getOptionNames();可以用来获取所有key/value形式的参数的key。
Set<String> optionNames = args.getOptionNames();
//args.getOptionValues(key));可以根据key获取key/value 形式的参数的value。
for(String key:optionNames){
System.out.println("MyApplication>>>"+key+":"+args.getOptionValues(key));
}
//args.getSourceArgs(); 则表示获取命令行中的所有参数。
String[] sourceArgs = args.getSourceArgs();
System.out.println("MyApplicationRunner1>>>"+ Arrays.toString(sourceArgs));
}
}
当项目启动时,这里的
run 方法就会被自动执行,关于 run 方法的参数 ApplicationArguments ,我说如下几点:
- args.getNonOptionArgs();可以用来获取命令行中的无key参数(和CommandLineRunner一样)。
- args.getOptionNames();可以用来获取所有key/value形式的参数的key。
- args.getOptionValues(key));可以根据key获取key/value 形式的参数的value。
- args.getSourceArgs(); 则表示获取命令行中的所有参数。
ApplicationRunner
定义完成后,传启动参数也是两种方式,参数类型也有两种,第一种和 CommandLineRunner 一致,第二种则是 –key=value 的形式,在 IDEA 中定义方式如下:
或者使用 如下启动命令:
java -jar devtools-0.0.1-SNAPSHOT.jar 三国演义 西游记 --age=99
运行结果如下: