ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CommandLineRunner和ApplicationRunner执行初始化业务

2021-07-13 09:31:56  阅读:162  来源: 互联网

标签:初始化 CommandLineRunner run Runner ApplicationRunner 执行 Order


业务场景

在业务场景中, 有些情况下需要我们一启动项目就执行一些操作. 例如数据配置的相关初始化, 通用缓存的数据构造等. SpringBoot为我们提供了CommandLineRunner和ApplicationRunner两个接口来实现这个功能.

接口说明

CommandLineRunner和ApplicationRunner两个接口除了参数不同, 其他基本相同, 可以根据实际需求选择使用. CommandLineRunner中的run方法参数为String..., ApplicationRunner中的run方法参数为ApplicationArguments.在同等顺序中, ApplicationRunner会比CommandLineRunner优先执行

使用方法

定义一个类实现该接口, 重写其中的run方法即可. 如果有多个实现类, 我们可以通过@Order注解来定义优先级(数字越低越先执行)

  1. @Order(1)
  2. @Component
  3. public class MyCommandLineRunner1 implements CommandLineRunner {
  4. @Override
  5. public void run(String... args) throws Exception {
  6. System.out.println("========== 初始任务MyCommandLineRunner1 ==========");
  7. }
  8. }
  9. @Order(2)
  10. @Component
  11. public class MyCommandLineRunner2 implements CommandLineRunner {
  12. @Override
  13. public void run(String... args) throws Exception {
  14. System.out.println("========== 初始任务MyCommandLineRunner2 ==========");
  15. // throw new RuntimeException("模拟异常");
  16. }
  17. }
  18. @Order(2)
  19. @Component
  20. public class MyApplicationRunner1 implements ApplicationRunner {
  21. @Override
  22. public void run(ApplicationArguments args) throws Exception {
  23. System.out.println("========== 初始任务MyApplicationRunner1 ==========");
  24. }
  25. }

启动项目, 输出如下:

注意事项:

1. CommandLineRunner和ApplicationRunner的执行其实是整个项目启动周期中的一部分, Runner执行完成后, 才最终启动项目.

2. 如果Runner中出现异常, 就会影响项目的启动, 所以要在Runner中处理异常

3. 如果Runner中需要指定定时周期任务(如一直循环打印某些信息等), 需要在异步线程中执行, 否则项目的主线程会一直阻塞 , 无法启动成功

标签:初始化,CommandLineRunner,run,Runner,ApplicationRunner,执行,Order
来源: https://www.cnblogs.com/maBK/p/15004872.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有