实现系统启动任务

两个类

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 ,我说如下几点:

  1. args.getNonOptionArgs();可以用来获取命令行中的无key参数(和CommandLineRunner一样)。
  2. args.getOptionNames();可以用来获取所有key/value形式的参数的key。
  3. args.getOptionValues(key));可以根据key获取key/value 形式的参数的value。
  4. args.getSourceArgs(); 则表示获取命令行中的所有参数。

ApplicationRunner
定义完成后,传启动参数也是两种方式,参数类型也有两种,第一种和 CommandLineRunner 一致,第二种则是 –key=value 的形式,在 IDEA 中定义方式如下:

或者使用 如下启动命令:

java -jar devtools-0.0.1-SNAPSHOT.jar 三国演义 西游记 --age=99

运行结果如下:

posted @ 2020-08-05 20:52  柒丶月  阅读(100)  评论(0编辑  收藏  举报