CommandLineRunner和ApplicationRunner


前言

在 Spring Boot 中,ApplicationRunner 和 CommandLineRunner 接口可以在应用启动后执行一些初始化操作或者运行一些脚本。
若想在项目启动之后立即执行某一段代码,就可以实现ApplicationRunner或 CommandLineRunner接口,相应的代码写在重写的run()方法中。

下面是这两种接口的基本介绍及其使用场景。

一、两者的区别

ApplicationRunner:
是 Spring Boot 提供的一个接口。
可以通过 Bean 的依赖注入来访问 Spring 容器中的其他 Bean。
更适合于需要访问 Spring 上下文中其他 Bean 的场景。

CommandLineRunner:
同样是 Spring Boot 提供的一个接口。
没有直接的依赖注入支持,但是可以通过构造方法注入所需的 Bean。
更适合于简单的命令行参数处理或执行一些不需要访问 Spring 上下文的简单任务。

二、CommandLineRunner接口示例

代码如下:

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class CommandLineRunnerTest implements CommandLineRunner {

    @Override
    public void run(String... args) {
        log.info("-----------CommandLineRunnerTest启动-----------");
        // TODO 此处可以进行相关业务处理
    }
}

当有多个CommandLineRunner继承类时,为了使他们按一定顺序执行,可以使用 @Order 注解或实现 Ordered 接口。

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Order(1)
public class CommandLineRunnerTest01 implements CommandLineRunner {

    @Override
    public void run(String... args) {
        log.info("-----------CommandLineRunnerTest01启动-----------");
        // TODO 此处可以进行相关业务处理
    }
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@Order(2)
public class CommandLineRunnerTest02 implements CommandLineRunner {
    @Override
    public void run(String... args) {
        log.info("-----------CommandLineRunnerTest02启动-----------");
    }
}

以上代码中会先执行@Order(1)的实现类。

三、ApplicationRunner接口示例

代码如下:

@Slf4j
@Component
public class ApplicationRunnerTest implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("-----------ApplicationRunnerTest启动-----------");
        // TODO 此处可以进行相关业务处理
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值