SpringBoot中的ApplicationRunner与CommandLineRunner问题

 更新时间:2022年09月30日 11:23:00   作者:融极  
这篇文章主要介绍了SpringBoot中的ApplicationRunner与CommandLineRunner问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

概述

开发中可能会有这样的场景,需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。

SpringBoot给我们提供了两个接口来帮助我们实现这种需求。

两个启动加载接口分别是:

  • CommandLineRunner
  • ApplicationRunner

他们的执行时机是容器启动完成的时候。

实现启动加载接口

这两个接口中有一个run方法,我们只需要实现这个方法即可。这个两个接口的不同之处在于:

ApplicationRunner中的run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。

ApplicationRunner接口的示例

package com.jdddemo.demo.controller;
 
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
 
@Component
@Order(value = 1)
public class JDDRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(args);
        System.out.println("这个是测试ApplicationRunner接口");
    }
}

执行结果如下:

CommandLineRunner接口示例

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
 
@Component
public class TestCommandLineRunner implements CommandLineRunner {
 
    @Override
    public void run(String... args) throws Exception {
        System.out.println("<这个是测试CommandLineRunn接口");
    }
}

CommandLineRunner和ApplicationRunner的执行顺序

在spring boot程序中,我们可以使用不止一个实现CommandLineRunner和ApplicationRunner的bean。

为了有序执行这些bean的run()方法,可以使用@Order注解或Ordered接口。

下面例子中创建了两个实现CommandLineRunner接口bean和两个实现ApplicationRunner接口的bean。

我们使用@Order注解按顺序执行这四个bean

CommandLineRunnerBean1.java

@Component
@Order(1)
public class CommandLineRunnerBean1 implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("CommandLineRunnerBean 1");
    }
}

ApplicationRunnerBean1.java

@Component
@Order(2)
public class ApplicationRunnerBean1 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments arg0) throws Exception {
        System.out.println("ApplicationRunnerBean 1");
    }
}

CommandLineRunnerBean2.java

@Component
@Order(3)
public class CommandLineRunnerBean2 implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("CommandLineRunnerBean 2");
    }
}

ApplicationRunnerBean2.java

@Component
@Order(4)
public class ApplicationRunnerBean2 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments arg0) throws Exception {
        System.out.println("ApplicationRunnerBean 2");
    }
}

输出结果为:

CommandLineRunnerBean 1
ApplicationRunnerBean 1
CommandLineRunnerBean 2
ApplicationRunnerBean 2

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

相关文章

  • Java泛型类与泛型方法的定义详解

    Java泛型类与泛型方法的定义详解

    这篇文章主要介绍了Java泛型类与泛型方法的定义,结合实例形式详细分析了java泛型类与泛型方法定义、用法及相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • Spring Mvc中CommonsMultipartFile的特性实例详解

    Spring Mvc中CommonsMultipartFile的特性实例详解

    这篇文章主要给大家介绍了关于Spring Mvc中CommonsMultipartFile特性的相关资料,SpringMVC拥有强大的灵活性,非侵入性和可配置性,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • SpringBoot结合JWT实现用户登录、注册、鉴权

    SpringBoot结合JWT实现用户登录、注册、鉴权

    用户登录、注册及鉴权是我们基本所有系统必备的,也是很核心重要的一块,本文主要介绍了SpringBoot结合JWT实现用户登录、注册、鉴权,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05
  • Java中volatile关键字的作用

    Java中volatile关键字的作用

    这篇文章主要介绍了Java中volatile关键字的作用,文章基于Java的相关资料展开对volatile关键字作用的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • java程序设计语言的优势及特点

    java程序设计语言的优势及特点

    在本篇文章里小编给大家分享的是一篇关于java程序设计语言的优势及特点的内容,需要的朋友们可以学习参考下。
    2020-02-02
  • SpringBoot 自定义注解异步记录复杂日志详解

    SpringBoot 自定义注解异步记录复杂日志详解

    这篇文章主要为大家介绍了SpringBoot 自定义注解异步记录复杂日志详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 深入理解Spring Cache框架

    深入理解Spring Cache框架

    今天给大家分析一下 Spring 框架本身对这些缓存具体实现的支持和融合。使用 Spring Cache 将大大的减少我们的Spring项目中缓存使用的复杂度,提高代码可读性。本文将从以下几个方面来认识Spring Cache框架。感兴趣的小伙伴们可以参考一下
    2018-11-11
  • MyBatisPuls多数据源操作数据源偶尔报错问题

    MyBatisPuls多数据源操作数据源偶尔报错问题

    这篇文章主要介绍了MyBatisPuls多数据源操作数据源偶尔报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java中的Unsafe工具类使用详解

    Java中的Unsafe工具类使用详解

    这篇文章主要介绍了Java中的Unsafe工具类使用详解,Unsafe是jdk提供的一个直接访问操作系统资源的工具类(底层c++实现),它可以直接分配内存,内存复制,copy,提供cpu级别的CAS乐观锁等操作,需要的朋友可以参考下
    2023-12-12
  • Spring内存缓存Caffeine的基本使用教程分享

    Spring内存缓存Caffeine的基本使用教程分享

    Caffeine作为当下本地缓存的王者被大量的应用再实际的项目中,可以有效的提高服务吞吐率、qps,降低rt,本文就来简单介绍下Caffeine的使用姿势吧
    2023-03-03

最新评论