一、CommandLineRunner
通过实现 CommandLineRunner 来定义启动任务:
1 2 3 4 5 6 7 8
| @Component @Order(1) public class MyCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("Order(1):" + Arrays.toString(args)); } }
|
1 2 3 4 5 6 7 8
| @Component @Order(2) public class MyCommandLineRunner01 implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("Order(2):" + Arrays.toString(args)); } }
|
其中:
- @Order 注解为优先级,数值越小,优先级越高;
- args 为启动类中的 String[] args;
- args 参数可以在配置里面的 Program argumens 进行配置,也可以打成 jar 包的时候,使用命令进行设置

最终结果如下:

可以看到 Order(1) 的优先级高于 Order(2)
二、ApplicationRunner
通过实现 ApplicationRunner 来定义启动任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Component @Order(3) public class MyApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Order3:"); String[] sourceArgs = args.getSourceArgs(); System.out.println("sourceArg:" + Arrays.toString(sourceArgs)); System.out.println("🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰");
List<String> nonOptionArgs = args.getNonOptionArgs(); System.out.println("nonOptionArgs:" + nonOptionArgs); System.out.println("🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰");
Set<String> optionNames = args.getOptionNames(); for (String optionName : optionNames) { System.out.println(optionName + args.getOptionValues(optionName)); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Component @Order(4) public class MyApplicationRunner01 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("Order4"); String[] sourceArgs = args.getSourceArgs(); System.out.println("sourceArg:" + Arrays.toString(sourceArgs)); System.out.println("🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰");
List<String> nonOptionArgs = args.getNonOptionArgs(); System.out.println("nonOptionArgs:" + nonOptionArgs); System.out.println("🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰");
Set<String> optionNames = args.getOptionNames(); for (String optionName : optionNames) { System.out.println(optionName + args.getOptionValues(optionName)); } System.out.println("🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰"); } }
|
- args.getNonOptionArgs():可以用来获取命令行中的无key参数;
- args.getOptionNames():可以用来获取所有key/value形式的参数的key;
- args.getOptionValues(key)):可以根据key获取key/value 形式的参数的value;
- args.getSourceArgs();:则表示获取命令行中的所有参数。
参数配置:

最终结果:

注:CommandLineRunner 和 ApplicationRunner 是可以一起用的,优先级还是通过 @Order 进行排序
结果:
