本文主要是介绍CommandLineRunner和ApplicationRunner,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、两者的区别
- 二、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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic void run(String... args) {log.info("-----------CommandLineRunnerTest02启动-----------");}
}
以上代码中会先执行@Order(1)的实现类。
三、ApplicationRunner接口示例
代码如下:
@Slf4j
@Component
public class ApplicationRunnerTest implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {log.info("-----------ApplicationRunnerTest启动-----------");// TODO 此处可以进行相关业务处理}
}
这篇关于CommandLineRunner和ApplicationRunner的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!