SpringBoot中CommandLineRunner接口起什么作用呢?

2023-10-30

转自:

SpringBoot中CommandLineRunner接口起什么作用呢?

下文笔者讲述SpringBoot中CommandLineRunner接口的功能简介说明,如下所示

SpringBoot中CommandLineRunner接口的简介

springboot中应用服务启动时
   会加载一些数据和运行一些应用的初始化动作
    如:删除临时文件,清除缓存信息,读取配置文件信息,数据库连接等
    此时这些操作就可以借助CommandLineRunner接口的功能
注意事项:
     1.SpringBoot提供CommandLineRunner接口
	   当有该接口多个实现类时,提供了@order注解实现自定义执行顺序
	   也可以实现Ordered接口来自定义顺序。
     2.Ordered的数字越小,优先级越高,
	   也就是@Order(1)注解的类会在@Order(2)注解的类之前执行

例:

package com.java265.init;

import com.java265.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(value=1)
public class SpringDataInit implements CommandLineRunner {

    @Autowired
    private MyMethorClassService myMethorClassService;

    @Override
    public void run(String... strings) throws Exception {
        int result = myMethorClassService.add(99, 777);
        System.out.println("----------SpringDataInit1---------"+result);
    }
}

 
package com.java265.init;

import com.java265.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(value=2)
public class SpringDataInit2 implements CommandLineRunner {

    @Autowired
    private MyMethorClassService myMethorClassService;

    @Override
    public void run(String... strings) throws Exception {
        int result = myMethorClassService.add(99, 777);
        System.out.println("----------SpringDataInit2---------"+result);
    }
}

SpringBoot提供的ApplicationRunner接口也可以满足该业务场景。不同点:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。想要更详细地获取命令行参数,那就使用ApplicationRunner接口

package com.java265.init;

import com.java265.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

@Component
//@Order(value=3)
public class SpringDataInit3 implements ApplicationRunner,Ordered {

    @Autowired
    private MyMethorClassService myMethorClassService;

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        int result = myMethorClassService.add(10, 82);
        System.out.println("----------SpringDataInit3---------"+result);
    }

    @Override
    public int getOrder() {
        return 3;
    }
}

在Spring框架中,使用ApplicationListener接口也可以满足该业务场景

package com.java265.init;
import com.java265.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;

@Configuration
public class SpringDoneDataInit implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private MyMethorClassService    myMethorClassService;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        int result = myMethorClassService.add(5, 10);
        System.out.println("----------SpringDoneDataInit---------"+result);
    }
}

spring内置的事件

ContextRefreshedEvent:ApplicationContext容器初始化或者刷新时触发该事件
ContextStartedEvent:当使用ConfigurableApplicationContext接口的start()方法启动ApplicationContext容器时触发该事件
ContextClosedEvent:当使用ConfigurableApplicationContext接口的close()方法关闭ApplicationContext容器时触发该事件
ContextStopedEvent:
      当使用ConfigurableApplicationContext接口的stop()方法停止ApplicationContext容器时触发该事件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot中CommandLineRunner接口起什么作用呢? 的相关文章

  • 十大PyTorch最常用的转换函数

    介绍 Pytorch是一个深度学习框架 广泛用于图像分类 分割 目标识别等各种任务 在这种情况下 我们必须处理各种类型的数据 很可能在大多数情况下 数据可能不是我们所需要的格式 PyTorch转换就是救星 torchvision trans
  • 恩施职业技术学院工程能力实训开班!青春逐梦,砥砺前行

    为深化校企合作 产教融合助力新工科建设 提升学生工程实践能力 电巢工程能力实训班按照不同岗位类别 匹配对应的企业岗位任职能力要求对学生开展分级培养 以产业需求为导向 培养创新型 应用型人才 6月13日上午 深圳电巢联合恩施职业技术学院 工程
  • SessionID漏洞

    漏洞原理 当用户第一次访问服务程序时 服务器端会给用户创建一个独立的会话Session 并且生成一个SessionID SessionID在响应浏览器的时候会被加载到cookie中 并保存到浏览器中 当用户再一次访问服务程序时 请求中会携带

随机推荐

  • golang命令行库cobra的使用

    简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库 也是一个生成程序应用和命令行文件的程序 下面是Cobra使用的一个演示 Cobra提供的功能 简易的子命令行模式 如 app server app fetch等等 完全
  • Java long数据类型

    long数据类型是64位有符号的Java原始数据类型 当对整数的计算结果可能超出int数据类型的范围时使用 long数据类型范围是 9 223 372 036 854 775 808至9 223 372 036 854 775 807 2
  • JUC详细笔记

    此笔记根据黑马JUC课程整理 1 JUC概述 1 1什么是juc 在 Java 中 线程部分是一个重点 本篇文章说的 JUC 也是关于线程的 JUC就是 java util concurrent 工具包的简称 这是一个处理线程的工具包 JD
  • XHS信号和XVS信号

    XHS信号和XVS信号 camera的总体示意图如下 控制部分为摄像头上电 IIC控制接口 数据输出为摄像头拍摄的图像传到主控芯片 所有要有DATA 行场同步和时钟信号 摄像头有两种同步方式 行同步信号 HSYNC 和场同步信号 VSYNC
  • 分类问题的评价指标:二分类【准确率(Accuracy):用在数据均衡(每一类的样本数量相同)的数据集上】【精确率(Precision)】【召回率(Recall)】【F1】

    一 混淆矩阵 对于二分类的模型 预测结果与实际结果分别可以取0和1 我们用N和P代替0和1 T和F表示预测正确和错误 将他们两两组合 就形成了下图所示的混淆矩阵 注意 组合结果都是针对预测结果而言的 由于1和0是数字 阅读性不好 所以我们分
  • OpenGL系列教程之十二:OpenGL Windows图形界面应用程序

    这篇文章是关于使用MVC Model View Controller 模型 视图 控制 框架在windows平台下创建OpenGL图形界面应用程序 MVC框架在GUI Graphic User Interface 图形用户界面 应用程序中被
  • Docker之数据卷与Dockerfile

    一 docker基本运行 将容器后台运行并进入容器 docker run itd name 名字 centos 强制删除所有容器 docker rm f docker ps a 二 数据卷 目录挂载 docker在容器中管理数据主要有两种方
  • 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一 TCP Socket API 1 socket 2 bind 3 listen 4 accept 5 connect 二 封装TCPSocket 三 服务端的实现 1 封装TCP通用服务器 2 封装任务对象 3 实现转换
  • python高阶函数用法之map reduce

    map 函数 接收两个参数 一个是函数 一个是Iterable map将传入的函数依次作用到序列的每个元素 并把结果作为新的Iterator返回 gt gt gt def f x return x x gt gt gt r map f 1
  • 一直没懂PCB叠层设计,直到看见这篇文章......

    总的来说叠层设计主要要遵从两个规矩 每个走线层都必须有一个邻近的参考层 电源或地层 邻近的主电源层和地层要保持最小间距 以提供较大的耦合电容 下面列出从两层板到八层板的叠层来进行示例讲解 一 单面PCB板和双面PCB板的叠层 对于两层板来说
  • Python-文件操作

    Python文件操作 1 打开文件 使用open 函数打开文件 指定文件名和模式 常用模式有 r 读取 默认 w 写入 会先截断文件 a 追加 b 二进制模式 t 文本模式 默认 updating reading and writing f
  • titanic数据集_数据挖掘项目——泰坦尼克号生还预测

    数据集来源于kaggle经典竞赛数据集 一 目的 根据数据集中的信息 利用python机器学习对泰坦尼克乘客是否生还进行预测 二 数据集 我的数据集有三个 test train genderclassmodel 都是csv格式 test和t
  • stm32f4有重映射么_STM32 端口复用&重映射(USART Remap)

    下面跟大家说一下STM32单片机的端口重映射 因为是以自己为实例 这里是以USART1的重映射为例 因为我要一个TFT LCD屏的主控板 考虑到FSMC 我选用了STM32F103VCT6 型号的CPU 一不小心串口接到USART1上了 因
  • networkx画图(番外)——(1)自定义节点布局

    networkx画图 番外 1 自定义节点布局 networkx虽然非常方便 但在一些超大规模的图数据上 依然显得吃力 所以大多数时候 它仅仅是被用来做一些实例性的分析和可视化展示的 这需要学会如何灵活的画图 最重要的就是布局 即每个节点在
  • word中导入zotero的参考文献

    平时使用Zotero管理文献 使用Word写完论文后想用Zotero导入参考文献 也方便修改参考文献格式 Zotero 打开Zotero找到编辑 首选项 打开首选项 下载国标格式 引用 获取更多样式 搜索框 China Word Word中
  • 技术学习的思考

    学习新的技术 先了解这项技术有什么用 可以解决哪些技术难点 落地这项技术的场景 以及和其他技术的对比 和提出自己大概了解这项技术后存在的疑问 o 例如核间通讯IPC与芯片间通讯ICC有什么区别 对要学的技术梳理出一个框架 根据这个框架先找到
  • 数仓建模—宽表的设计

    宽表的设计 高内聚低耦合 宽表是数仓里面非常重要的一块 数仓是分层的 这是技术进步和时代变化相结合的产物 数仓的分层式为了更好地管理数仓以及更加高效地进行数据开发 宽表主要出现在dwd 层和报表层 当然有的人说dws 层也有 宽表 从字面意
  • springmvc文件上传 并读取excel文件基本写法 多文件时参数为 @RequestParam MultipartFile[] myfiles 单文件时直接传File...

    说明 上传multipartFile时 无法直接转为File去读取excel文件内容 因为为了安全 不可能知道客户端文件绝对路径 解决方法为在服务器端生成一个File文件 然后再读取这个服务器的文件内容保存到数据库 controller 导
  • 完美解决 ModuleNotFoundError: No module named 'pip'

    我在安装django的一个第三方包时 就是执行下边命令时cmd提示pip版本得更新 确怎么也更新不了pip pip install django grappelli 我进去anaconda 提示anaconda也需要更新 更新完以后 再次进
  • SpringBoot中CommandLineRunner接口起什么作用呢?

    转自 SpringBoot中CommandLineRunner接口起什么作用呢 下文笔者讲述SpringBoot中CommandLineRunner接口的功能简介说明 如下所示 SpringBoot中CommandLineRunner接口的