CommandLineRunner与ApplicationRunner

概述

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与ApplicationRunner)