美文网首页
CommandLineRunner与ApplicationRun

CommandLineRunner与ApplicationRun

作者: 飞奔的阿甘 | 来源:发表于2019-11-21 21:48 被阅读0次

    概述

    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。

    相关文章

      网友评论

          本文标题:CommandLineRunner与ApplicationRun

          本文链接:https://www.haomeiwen.com/subject/qpsxwctx.html