JAVA代码优化:CommandLineRunner(项目启动之前,预先加载数据)

CommandLineRunner接口是Spring Boot框架中的一个接口,用于在应用程序启动后执行一些特定的代码逻辑。它是一个函数式接口,只包含一个run方法,该方法在应用程序启动后被自动调用。可以帮助我们在应用程序启动后自动执行一些代码逻辑,从而提高应用程序的性能和效率。

性能优化时使用:

  1. 缓存预热: 在应用程序启动后,可以使用CommandLineRunner来执行缓存的预热操作。通过预先加载和填充缓存,可以减少后续请求的响应时间,提高系统的性能。

  2. 数据库连接池初始化: 在应用程序启动后,可以使用CommandLineRunner来初始化数据库连接池。这样可以避免在第一次访问数据库时建立连接的延迟,提高数据库操作的效率。

  3. 后台任务调度: CommandLineRunner可以用于启动后台任务调度器,例如定时任务。通过在应用程序启动时调度任务,可以确保任务按计划执行,避免手动触发和管理任务的麻烦。

详细分析:

  1. 功能: CommandLineRunner接口提供了一种在应用程序启动后执行特定逻辑的机制。通过实现CommandLineRunner接口并重写其中的run方法,可以在应用程序启动后执行自定义的初始化任务或逻辑。

  2. 方法签名: CommandLineRunner接口中只有一个抽象方法run,其方法签名如下:

    run方法接受一个String类型的可变参数args,该参数可以用于获取命令行参数。方法不返回值,但可以抛出异常。

  3. 执行时机: CommandLineRunner接口的run方法会在Spring Boot应用程序启动后自动被调用。具体来说,当Spring Boot应用程序启动完成后,Spring Boot会扫描容器中所有实现了CommandLineRunner接口的bean,并依次调用它们的run方法。

  4. 多个实现类的执行顺序: 如果存在多个实现了CommandLineRunner接口的类,那么它们的run方法执行的顺序将按照Spring Boot启动时注册的顺序执行。可以使用@Order注解或实现Ordered接口来指定执行顺序。

  5. 使用场景: CommandLineRunner接口适用于需要在应用程序启动后执行一些初始化任务的场景,例如加载配置信息、初始化数据库连接、预热缓存等。它还可以用于执行定时任务或其他需要在应用程序启动时立即执行的逻辑。

 例如:

package com.muyuan;import com.muyuan.clues.service.ITbActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.scheduling.annotation.EnableScheduling;/*** 启动程序* * */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
@EnableScheduling
public class MuyuanApplication implements CommandLineRunner {@Autowiredprivate ITbActivityService activityService;public static void main(String[] args){SpringApplication.run(MuyuanApplication.class, args);}//CommandLineRunner的run方法@Overridepublic void run(String... args)  {try{//加载所有活动code到缓存activityService.loadAllActivityCode();}catch (Exception ex){ex.printStackTrace();}}
}

注意:

也可以用@Order(value = 1)或@Order(value = 2)来定义Application(项目启动类)执行的先后

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

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

相关文章

Java(十)(网络编程,UDP,TCP)

目录 网络编程 两种软件架构 网络通信的三要素 IP IPv4的地址分类 特殊IP 端口号 协议 用UDP协议发送数据 用UDP接收数据 TCP接收和发送数据 TCP通信--支持与多个客户端同时通信 网络编程 可以让设备中的程序与网络上其他设备的程序进行数据交互(实现网络通信) 两…

【面试经典150 | 二分查找】搜索二维矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一:二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等…

Fiddler抓包工具之fiddler的composer可以简单发送http协议的请求

一,composer的详解 右侧Composer区域,是测试接口的界面: 相关说明: 1.请求方式:点开可以勾选请求协议是get、post等 2.url地址栏:输入请求的url地址 3.请求头:第三块区域可以输入请求头信息…

springmvc+mybatis+mysql8+idea+jqgrid前端

一、背景 主要是为了学习jqgrid前端技术,熟练一下前后端交互数据 二、效果图 访问地址:http://localhost:8080/cr/views/jqGridDemo.jsp 三、代码展示 控制层JqGridController.java Controller RequestMapping("/jqgrid") public class Jq…

拥抱变化,良心AI工具推荐

文章目录 💥 简介🍄 工具介绍🍓 功能特点🥗 使用场景🎉 用户体验🧩 下载地址🍭 总结 💥 简介 我是一名资深程序员,但薪资缺对不起资深两个字,为了生存&#x…

安装selenium+chrome详解

1、创建yaml文件 创建yaml文件,命名为:docker-compose-chrome.yaml,具体内容如下: version: "3.9" services:spiderdriver:image: selenium/standalone-chrome:114.0restart: alwayshostname: spiderdrivercontainer_name: spiderdriverdeploy:resources:limit…

使用Docker部署开源分布式任务调度系统DolphinScheduler

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 使用Docker部署开源分布式任务调度系统DolphinScheduler 前些天发现了一个巨牛的人工智能学习网…

【iOS】Bug调试

文章目录 前言一、定位编译错误二、设置与查看断点1.文件行断点设置2.符号断点设置3.Exception Breakpoint4.Constraint Error Breakpoint 三、调试工具四、输出窗口五、变量查看窗口六、查看线程七、LLDB调试工具1.p,po命令2.expr命令3.bt命令 前言 在我们的编码过…

Collection的其他相关知识

前置知识:可变参数 就是一种特殊参数,定义在方法 构造器的形参列表里,格式是:数据类型...参数名称; 可变参数的特点和好处 特点:可以不传数据给它;可以传一个或者同时传多个数据给它&#xff…

Vue3+nuxt+ts项目引入高德地图API实现步骤

看了好多相关的文章都没有完全贴合选用Vue3nuxtts框架的,也不太靠谱,只好自己踩坑实现了 首先去高德开放平台用自己的账号申请一个key,位置如下,申请好后保存好生成的key 我们使用vuemap/vue-amap,一个高德地图2.0版本…

阅读软件OmniReader Pro mac功能特色

OmniReader Pro mac是一款文字识别和阅读软件,它可以将印刷体和手写体的文字转换为数字文本,并将其朗读出来。该软件适用于视力受损、阅读困难、语言障碍等用户,可以帮助他们更加轻松地获取信息和阅读文本。 OmniReader Pro具有简洁直观的用户…

单细胞个性化细胞注释

关于单细胞中级的课程内容,前面已经有了三次直播。欢迎回看~ 单细胞直播一理解seurat数据结构与pbmc处理流程 单细胞直播二从GSE104154中理解seurat结构 单细胞直播三seurat数据结构与数据可视化 本期主要内容 本期指哪打哪,自己选定细胞&…

java的四种内部类,从0讲清楚

什么是内部类? 为什么要学习内部类? 可以发现,发动机虽然跟汽车相关,但发动机不像车龄或颜色一样,只用一个变量就可以描述,而是要有发动机品牌,发动机年限,多个变量描述发动机。那么…

MATLAB 自抗扰控制 - Active Disturbance Rejection Control

系列文章目录 MATLAB 模型参考自适应控制 - Model Reference Adaptive Control 文章目录 系列文章目录前言一、控制器结构1.1 一阶逼近1.2 二阶逼近 二、指定控制器参数参考 前言 自抗扰控制 (ADRC) 是一种无模型控制方法,适用于为具有未知动态特性以及内部和外部…

Azure Machine Learning - 使用 Azure SDK 进行全文搜索

了解如何使用 Azure SDK 中的 Azure.Search.Documents 客户端库创建、加载和查询使用示例数据的搜索索引,实现全文搜索。 全文搜索使用 Apache Lucene 进行索引和查询,使用 BM25 排名算法对结果进行评分。 关注TechLead,分享AI全维度知识。作…

【Spring Boot 源码学习】ApplicationContextInitializer 详解

Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》,我们…

【傻瓜级JS-DLL-WINCC-PLC交互】6.​向PLC里面装载数据变量

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…

使用String.valueOf()的坑

说明:记录一次使用String.valueOf()的坑,以下是一段有问题的代码: String count String.valueOf(listData.get(0).get(0).get("count");if (StringUtils.isBlank(count) || "0".equals(count)) {result.setResult(page)…

【bat】批处理脚本大全

目录 1.概述 2.变量 3.运算符 3.2.重定向运算符 3.3.多命名运算符 3.4.管道运算符 4.命令 4.1.基本命令 4.2.参数传递 4.3.查看脚本内容 4.4.注释 4.5.日期和时间 4.6.启动脚本 4.7.调用其他bat 4.8.任务管理 4.8.1.任务列表查看 4.8.2.任务终止 4.9.文件夹 …

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高,尤其女性爱美悦己消费逐年增加,如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年,传统线下经营模式已经很难满足当今客户消费流程,如品牌寻找、服务预约、到店、…