CommandLineRunner解释学习

目录

一、CommandLineRunner介绍

1.1 接口定义

1.2 工作原理

二、CommandLineRunner作用

三、CommandLineRunner使用方式

3.1 实现CommandLineRunner

3.2 配置Spring Boot项目

四、完整代码地址

小剧场:坚持不懈!


一、CommandLineRunner介绍

CommandLineRunner是Spring Boot提供的一个便捷接口,它允许开发者在Spring应用程序启动后执行一些特定的代码。这个接口特别适用于那些需要在服务器启动时立即执行的任务,比如数据初始化、发送通知或者执行一些定时任务。

1.1 接口定义

CommandLineRunner接口只包含一个方法run,这个方法将在Spring应用程序启动后被调用。开发者可以实现这个接口并定义run方法的具体逻辑。

package org.springframework.boot.CommandLineRunner;
public interface CommandLineRunner {void run(String... args) throws Exception;
}

1.2 工作原理

当Spring Boot应用程序启动时,Spring容器会查找所有实现了CommandLineRunner接口的Bean,并在容器启动完成后调用这些Bean的run方法。如果有多个CommandLineRunner实现,它们的执行顺序将根据实现类的名称进行排序。

二、CommandLineRunner作用

CommandLineRunner的主要作用是在应用程序启动时执行一些特定的任务,这些任务通常包括:

  • 数据初始化:在应用程序启动时加载一些初始数据到数据库中。
  • 发送通知:向用户或系统发送启动通知,例如发送邮件或消息队列中的消息。
  • 执行检查:进行应用程序启动前的检查,如数据库连接检查、文件系统检查等。
  • 启动日志:记录应用程序启动日志,提供启动时的系统状态信息。
  • 定时任务:启动一些定时任务,如清理旧数据、备份操作等。

三、CommandLineRunner使用方式

要使用CommandLineRunner,您需要创建一个实现了CommandLineRunner接口的类,并实现run方法。然后将这个类声明为Spring容器中的Bean,Spring Boot将在启动时自动调用它。

3.1 实现CommandLineRunner

完整的代码示例位置:https://gitee.com/zhulinxishui/SpringBoot-CommandLineRunner.git

下面是一部分的CommandLineRunner实现示例:

package com.wxr.config;
import com.wxr.service.AsyncTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.concurrent.*;/*** @ClassName initRunnable* @Description TODO* @Author wangxinrui* @Date 2024/3/25 19:22* @Version**/
@Component
@Order(2)
public class InitRunnable implements CommandLineRunner {@Autowiredprivate AsyncTaskService asyncTaskService;/***@描述 重写一下run方法,编写自己需要的逻辑。*@用途 此方法一般用于创建默认数据,加载配置文件,初始化数据库操作等。 可以实现CommandLineRunner接口,在run方法中加载一些初始化数据到数据库等。适合做一些数据预加载工作。*@执行时间 在系统启动完成后加载执行。*@创建人 wangxinrui*@创建时间 2024/3/25*@修改人和其它信息*/@Overridepublic void run(String... args) throws Exception {System.out.println("setup3");/**可以在这个线程中异步执行其他现场,很好的增强了相关功能*/new Thread(()->{asyncTaskService.doTaskOne();asyncTaskService.doTaskTwo();asyncTaskService.doTaskThree();}).start();/** 也可以使用线程池来做相关的操作*/Executor executor = Executors.newCachedThreadPool();executor.execute(new ExecutorRunable("10000", asyncTaskService));/** 使用带有返回值的线程处理。 */Callable<String> task = () ->{// 这里是你的异步任务String result = asyncTaskService.doTaskFive();return result;};ExecutorService executorSingle = Executors.newSingleThreadExecutor();Future<String> future =  executorSingle.submit(task);String result = future.get();System.out.println(result);}
}

3.2 配置Spring Boot项目

为了确保Spring Boot能够扫描到我们的MyRunner类并将其作为Bean注册到容器中,我们需要在项目中添加Spring Boot的依赖。

在pom.xml中添加以下依赖:

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 其他依赖... -->
</dependencies>

通过这种方式,您可以在Spring Boot应用程序中轻松地使用CommandLineRunner来执行启动时的任务。

四、完整代码地址

代码地址:https://gitee.com/zhulinxishui/SpringBoot-CommandLineRunner.git

小剧场:坚持不懈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

anaconda配置虚拟python环境

使用conda create命令 举例&#xff1a; 创建一个名为breed的新环境&#xff0c;并在其中安装python 3.7版本的步骤&#xff1a; 创建虚拟环境 conda create --name breed python3.7激活新创建的环境&#xff1a; conda activate breed查看存在的虚拟环境 conda env list退…

复杂度3 二分查找函数

文章预览&#xff1a; 题目算法代码 题目 算法 本题要求用二分法查找顺序表的一个值&#xff0c;比较简单注意指针格式即可 代码 Position BinarySearch( List L, ElementType X ) {int begin1,mid;int endL->Last;ElementType temp;while(begin<end){mid(beginend)/2…

【Spring Security】 快速入门

文章目录 一、 身份认证Demo1、创建工程2、代码编写2.1、Controller2.2、Html2.3、application.properties配置 3、启动项目并访问 二、Spring Security 默认做了什么二、底层原理1.概述2.FiltersDelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters 三…

Java学习指南:从基础到进阶,一篇文章带你全面了解!

一、Java语言概述 Java是一种面向对象的编程语言&#xff0c;它不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念。Java语言具有功能强大和简单易用两个特征&#xff0c;即Java语言作为静态面向对象编程语言的代表&#xff0c;极好地实现了面向…

vue3-pinia使用(末尾有彩蛋)

什么是 pinia Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。 之前用的是 vuex&#xff0c;后面 vue 官方团队不维护了&#xff0c;推荐使用 pinia 安装 yarn add pinia # 或者使用 npm npm install piniapnpm install piniaStore 是什么&#xf…

实验一 Python集成开发环境的搭建及可视化库的安装

一、安装集成开发环境 下载安装包 官方网址&#xff1a; Free Download | Anaconda 或者镜像网站下载&#xff08;较快&#xff09; https://repo.anaconda.com/archive/ 安装 配置环境变量 验证 输入&#xff1a; conda -V 二、下载pyecharts环境 点击 Anaconda Promp…

探索实战课程的魅力

在当今迅速变化的时代&#xff0c;学习不仅仅是获取知识&#xff0c;更是掌握实用技能的关键。随着在线学习的兴起&#xff0c;实战课程在培养学生实践能力方面发挥着越来越重要的作用。本文将探讨实战课程的魅力&#xff0c;以及它们对个人职业发展的巨大影响。 深度学习的机…

spring-boot之shiro安全框架配置使用

shiro架构&#xff08;外部&#xff09; shiro架构(内部) 具体API操作 获取当前的用户对象 Subject currentUser SecurityUtils.getSubject();通过当前用户拿到session Session session currentUser.getSession(); session.setAttribute("someKey", "aValu…

微信公众号运营必备工具合集

微信公众号运营必备工具合集 各位同学&#xff0c;想要成为一名合格的公众号运营&#xff0c;必须要搭建一个属于自己的运营工具库&#xff0c;可以在日常工作中最大限度的提高效率。 91微信编辑器 &#xff1a;http://bj.91join.com/ 壹伴助手&#xff1a;https://yiban.io…

在assembleRelease之前执行自定义任务

背景 在实际的Gradle项目开发中&#xff0c;我们总是会遇到一些需求&#xff0c;要在release编译的时候执行一些任务&#xff0c;但debug时不需要。然而&#xff0c;Gradle编译有自己的一套生命周期&#xff0c;比如Android项目的assembleRelease任务在编译启动之前是没有办法…

下载及安装PHP,composer,phpstudy,thinkPHP6.0框架

文章目录 前言 thinkPHP是一款开源的PHP框架&#xff0c;它是基于MVC&#xff08;Model-View-Controller&#xff09;设计模式构建的。thinkPHP提供了丰富的功能和组件&#xff0c;使得开发人员可以快速、高效地构建和维护Web应用程序。 以下是thinkPHP框架的一些特点和功能&…

2023年欧亚地区网络安全态势综述

文 | 中国社会科学院俄罗斯东欧中亚研究所研究员 肖斌&#xff1b;中国社会科学院大学国际政治经济学院研究助理 刘聪 网络安全问题是一个复杂的问题&#xff0c;不仅涉及技术发展&#xff0c;也包含诸多政治色彩。尽管数字空间拉近了互联用户的距离&#xff0c;但是在国际政治…

上位机图像处理和嵌入式模块部署(qmacvisual测量标定)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在机器视觉中,测量是很重要的一个环节。如果是简单的定位,可能精度要求并不那么严格。但是如果是对产品进行QA测量,需要精确到0.1mm,甚至是0.05mm这样的精度,那就需要对camera…

蓝队面经(一)

蓝队面经(一) 文章目录 蓝队面经(一)入侵排查思路windows入侵排查思路Linux入侵排查思路 Linux 如何查看登录日志Windows 和 Linux 的日志文件放在哪里&#xff1f;WindowsLinux Linux 常用排查命令有哪些&#xff1f;Linux 的 Selinux 是什么&#xff1f;如何设置 Selinux&…

【Leetcode】2952. 需要添加的硬币的最小数量

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个下标从 0 0 0 开始的整数数组 c o i n s coins coins&#xff0c;表示可用的硬币的面值&#xff0c;以及一个整数 t a r g e t target target 。 如果存在某个 c o i …

剑指Offer题目笔记21(计数排序)

面试题74&#xff1a; 问题&#xff1a; ​ 输入一个区间的集合&#xff0c;将重叠的区间合并。 解决方案&#xff1a; ​ 先将所有区间按照起始位置排序&#xff0c;然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并&#xff0c;然后判断合并…

精选2024年最佳项目管理系统!实用推荐与详细评测

随着企业规模的扩大&#xff0c;项目量也会呈几何倍的增长&#xff0c;项目管理系统就成了企业管理必不可少的一部分。2024年优秀的项目管理系统推荐。今年为大家带来Microsoft Project、Zoho Projects、Jira以及Wrike项目管理系统评测。 什么是项目管理系统&#xff1f; 项目…

怎么更新sd-webui AUTOMATIC1111/stable-diffusion-webui ?

整个工程依靠脚本起来的&#xff1a; 可直接到stable-diffusion-webui子目录执行&#xff1a; git pull更新代码完毕后&#xff0c;删除venv的虚拟环境。 然后再次执行webui.sh&#xff0c;这样会自动重新启动stable-diffusion-webui.

springboot心灵治愈交流平台

摘 要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述心灵治愈交流平台的当前背景以及系统开发的…

代码随想录算法训练营第三十二天|leetcode738题

一、leetcode第738题 本题要求返回小于等于给定数字且从最高位到最低位呈单调递增的数值&#xff0c;需要从最低位向最高位遍历&#xff0c;如果最低位比其前一位小则若要使改变后数值最大需要将前一位作减一操作并记录下当前位&#xff0c;在遍历结束后将记录的当前位之后的所…