前言

Spring boot的CommandLineRunner接口主要用于实现在应用初始化后,去执行一段代码块逻辑,这段初始化代码在整个应用生命周期内只会执行一次。

如何使用CommandLineRunner接口

我们可以用以下三种方式去使用CommandLineRunner接口:

1)和@Component注解一起使用

这种使用方式相当简便,如下所示:

@Component
public class ApplicationStartupRunner implements CommandLineRunner {protected final Log logger = LogFactory.getLog(getClass());@Overridepublic void run(String... args) throws Exception {logger.info("ApplicationStartupRunner run method Started !!");}
}

2)和@SpringBootApplication注解一起使用

这种使用方式也相当的简单,参考代码如下:

@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer implements CommandLineRunner {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(SpringBootWebApplication.class);}public static void main(String[] args) throws Exception {SpringApplication.run(SpringBootWebApplication.class, args);}@Overridepublic void run(String... args) throws Exception {logger.info("Application Started !!");}
}

3)声明一个实现了CommandLineRunner接口的Bean

这种方式其实也大同小异,就是在SpringBootApplication里定义一个Bean,改Bean实现了CommandLineRunner接口,参考代码如下:

ApplicationStartupRunner.java

public class ApplicationStartupRunner implements CommandLineRunner {protected final Log logger = LogFactory.getLog(getClass());@Overridepublic void run(String... args) throws Exception {logger.info("Application Started !!");}
}

注册ApplicationStartupRunner bean

@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(SpringBootWebApplication.class);}public static void main(String[] args) throws Exception {SpringApplication.run(SpringBootWebApplication.class, args);}@Beanpublic ApplicationStartupRunner schedulerRunner() {return new ApplicationStartupRunner();}
}

注意:在实现CommandLineRunner接口时,run(String… args)方法内部如果抛异常的话,会直接导致应用启动失败,所以,一定要记得将危险的代码放在try-catch代码块里。

用@Order注解去设置多个CommandLineRunner实现类的执行顺序

一个应用可能存在多个CommandLineRunner接口实现类,如果我们想设置它们的执行顺序,可以使用 @Order实现

@Order(value=3)
@Component
class ApplicationStartupRunnerOne implements CommandLineRunner {protected final Log logger = LogFactory.getLog(getClass());@Overridepublic void run(String... args) throws Exception {logger.info("ApplicationStartupRunnerOne run method Started !!");}
}@Order(value=2)
@Component
class ApplicationStartupRunnerTwo implements CommandLineRunner {protected final Log logger = LogFactory.getLog(getClass());@Overridepublic void run(String... args) throws Exception {logger.info("ApplicationStartupRunnerTwo run method Started !!");}
}

输出日志:

2017-03-08 13:55:04 - ApplicationStartupRunnerTwo run method Started !!
2017-03-08 13:55:04 - ApplicationStartupRunnerOne run method Started !!

为什么要使用CommandLineRunner接口

  • 实现在应用启动后,去执行相关代码逻辑,且只会执行一次;
  • spring batch批量处理框架依赖这些执行器去触发执行任务;
  • 我们可以在run()方法里使用任何依赖,因为它们已经初始化好了;

    原文文链

    Site4J

Spring boot CommandLineRunner接口使用例子相关推荐

  1. spring boot rest接口自动生成文档(包含swagger)

    spring boot rest接口自动生成文档(包含swagger)      写接口免不了写接口文档,但是当文档与代码分开独立演进的时候,会发生很多不同步的问题.         接口描述与代码同 ...

  2. spring boot开发接口api

    spring boot开发接口api ​ 在上一次教了大家怎么去搭建一个自己的后端模板之后,现在和大家分享讨论一下如何开发RestfulApi接口. 首先开发api之前要考虑到后端是需要写api文档的 ...

  3. spring boot rest接口自动生成文档(包含swagger)--gradle 下的配置

    之前写过一篇文章:spring boot rest接口自动生成文档(包含swagger),这个使用的是maven作为依赖管理工具,现在,让我们体验一下gradle在spring boot项目中如何配置 ...

  4. Spring Boot API 接口文档 Swagger 入门

    转载自 芋道 Spring Boot API 接口文档 Swagger 入门 摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/Swagger/ 「芋道源码」欢迎转 ...

  5. spring boot 文件下载接口

    文章目录 spring boot 文件下载接口 通过ResponseEntity实现 通过写HttpServletResponse的OutputStream实现 spring boot 文件下载接口 ...

  6. 什么?Spring Boot CommandLineRunner 有坑!?

    作者 | 狮子头儿 来源 | https://blog.csdn.net/zwq_zwq_zwq/article/details/81059017 使用场景 在应用程序开发过程中,往往我们需要在容器启 ...

  7. Spring Boot CommandLineRunner和ApplicationRunner

    在本快速教程中,我们将探索Spring Boot中两个非常流行的界面: CommandLineRunner和ApplicationRunner . 这些接口的一种常见用例是在应用程序启动时加载一些静态 ...

  8. Spring Boot 定义接口的方法是否可以声明为 private?

    我们在 Controller 中定义接口的时候,一般都是像下面这样: @GetMapping("/01") public String hello(Map<String,Ob ...

  9. Spring Boot 实现接口幂等性的 4 种方案!还有谁不会?

    点击关注公众号,Java干货及时送达 作者:超级小豆丁 链接:mydlq.club/article/94 一.什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两 ...

  10. Spring Boot 实现接口幂等性的 4 种方案作者:小小怪下士

    一.什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同.在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行 ...

最新文章

  1. 键盘历史记录实用程序已停止工作 解决办法
  2. Java开发者写SQL时常犯的10个错误
  3. 大数据分析工资单:六大行员工再涨薪 人均年薪超26万
  4. 99%的数据中心都会面临的痛点,现在终于有好的解决方案了!
  5. C#程序将DLL包进EXE方法
  6. 隐藏马尔科夫模型HMM
  7. 穷小子做网站赚钱终得丈母娘认可
  8. 对抗模拟浏览器的DDoS攻击
  9. 洛谷——P1059 [NOIP2006 普及组] 明明的随机数
  10. [bzoj1468][poj1741]Tree_点分治
  11. attention的前世今生
  12. 【元胞自动机】基于元胞自动机模拟生命演化、病毒感染等实例附matlab代码
  13. QT QML 3D模型查看器
  14. mysql Incorrect string value \xF0\x9F\x98\x84\xF0\x9F
  15. 直接激光雷达里程计:基于稠密点云的快速定位
  16. Windows 11 修改桌面文件路径
  17. vs2019开发android应用,VS 2019开发APP(一)界面和代码
  18. 软技能入门《质量》系列 -- 密切追踪
  19. 基于ESP8266的智能家庭检测系统
  20. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

热门文章

  1. VFP中加密和解密数据库的程序(VFP6-9运行没有问题)
  2. js触发click事件
  3. C#基础之多线程与异步
  4. freetype 2.11.0必须使用VS2012编译
  5. 在JFrame窗口上绘制文字,用PrintJob打印出来
  6. arm-linux-androideabi-gcc is unable to create an executable file.
  7. 手机备份时,应该把软件配置也备份起来
  8. 研究黑洞内部的一种方法
  9. 河里的水哪里去了——兼谈气候变暖与西方文明
  10. 电信猫不折旧,用了几年还是原价