SpringBoot使用CommandLineRunner和ApplicationRunner执行初始化业务方式

 更新时间:2024年08月20日 09:49:22   作者:BlueKitty1210  
这篇文章主要介绍了SpringBoot使用CommandLineRunner和ApplicationRunner执行初始化业务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

业务场景

在业务场景中,有些情况下需要我们一启动项目就执行一些操作.

例如数据配置的相关初始化,通用缓存的数据构造等。

SpringBoot为我们提供了CommandLineRunner和ApplicationRunner两个接口来实现这个功能。

接口说明

CommandLineRunner和ApplicationRunner两个接口除了参数不同,其他基本相同,可以根据实际需求选择使用.

CommandLineRunner中的run方法参数为String..., ApplicationRunner中的run方法参数为ApplicationArguments.

在同等顺序中,ApplicationRunner会比CommandLineRunner优先执行

使用方法

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

@Order(1)
@Component
public class MyCommandLineRunner1 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("========== 初始任务MyCommandLineRunner1 ==========");
    }
}

@Order(2)
@Component
public class MyCommandLineRunner2 implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("========== 初始任务MyCommandLineRunner2 ==========");
//        throw new RuntimeException("模拟异常");
    }
}

@Order(2)
@Component
public class MyApplicationRunner1 implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("========== 初始任务MyApplicationRunner1 ==========");
    }
}

启动项目, 输出如下:

注意事项

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • WebService教程详解(二)

    WebService教程详解(二)

    这篇文章主要介绍了WebService教程详解(二) 的相关资料,需要的朋友可以参考下
    2016-03-03
  • SpringBoot整合ELK实现日志监控

    SpringBoot整合ELK实现日志监控

    这篇文章主要为大家详细介绍了SpringBoot整合ELK实现日志监控的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

    SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

    这篇文章主要介绍了SpringBoot调第三方WebService接口的操作代码(.wsdl与.asmx类型 ),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 浅谈一下Java中的ReentrantLock

    浅谈一下Java中的ReentrantLock

    这篇文章主要介绍了浅谈一下Java中的ReentrantLock,这个类是JUC工具包中对线程安全问题提供的一种解决方案,它主要是用来给对象上锁,保证同一时间这能有一个线程在访问当前对象,需要的朋友可以参考下
    2023-09-09
  • JavaBean实体类处理外键过程解析

    JavaBean实体类处理外键过程解析

    这篇文章主要介绍了JavaBean实体类处理外键过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • JVM与操作系统之间的关系详解

    JVM与操作系统之间的关系详解

    JVM与操作系统之间是依赖与被依赖的关系,JVM依赖于操作系统提供的资源和服务,同时JVM也起到了抽象与隔离的作用,为Java程序提供了一个统一的、与平台无关的运行环境,提高了Java程序的安全性
    2025-03-03
  • JAVA泛型的继承和实现、擦除原理解析

    JAVA泛型的继承和实现、擦除原理解析

    这篇文章主要介绍了JAVA泛型的继承和实现、擦除原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Boot + thymeleaf 实现文件上传下载功能

    Spring Boot + thymeleaf 实现文件上传下载功能

    最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程序,部署在自己的Linux机器上,需要的朋友可以参考下
    2018-01-01
  • java实现多人聊天工具(socket+多线程)

    java实现多人聊天工具(socket+多线程)

    这篇文章主要为大家详细介绍了java实现多人聊天工具,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot访问MongoDB数据库的两种方式

    SpringBoot访问MongoDB数据库的两种方式

    MongoDB是一种非关系型数据库,通过文档存储数据,适用于大规模数据存储和高并发访问,这篇文章主要介绍了SpringBoot访问MongoDB数据库的两种方式,感兴趣想要详细了解可以参考下文
    2023-05-05

最新评论