springboot中使用CommandLineRunner和ApplicationRunner

在开发时,一般都有这样的需求,在服务启动完成后,自动执行某个动作。SpringBoot提供了CommandLineRunner和ApplicationRunner接口。我们先看看源码:

public interface CommandLineRunner {
    void run(String... args) throws Exception;
}
public interface ApplicationRunner {
    void run(ApplicationArguments args) throws Exception;
}

可以看出他们都提供了一个run(), 只是方法的参数不同而已。下面我们看看他们的应用。

@Component
public class MyCommandLineRunner implements CommandLineRunner, Ordered {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("this is MyCommandLineRunner");
    }

    @Override
    public int getOrder() {
        return 0;
    }
}
@Component
@Order(9)
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("MyApplicationRunner");
    }
}

就这么简单,这里要说的是,当一个项目中有多个类似这样的需求,并且这些需求执行顺序是有要求的,那么我们可以使用@Order注解,或者实现Ordered接口。@Order主机里面的值,是执行的优先级,数字越小,越先执行。如果没有指定数字值时,此时,是随机执行的。下面看看@Order注解的代码:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Documented
public @interface Order {
    int value() default 2147483647;
}

我们看到,默认值是整数的最大值。ok,就到这里吧。

上一篇:(011)Spring Boot之回调接口ApplicationContextInitializer、CommandLineRunner、ApplicationRunner


下一篇:CommandLineRunner接口