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

news2025/1/23 12:54:05

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 {

    @Autowired
    private ITbActivityService activityService;

    public static void main(String[] args){
        SpringApplication.run(MuyuanApplication.class, args);
    }

    //CommandLineRunner的run方法
    @Override
    public void run(String... args)  {
        try{
            //加载所有活动code到缓存
            activityService.loadAllActivityCode();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

注意:

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

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

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

相关文章

sharding-jdbc实现分库分表

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 😅😅最近几天的状态有点不对,所以有几天没有更新了。 当我们的数据量比较大…

css实现简单的抽奖动画效果和旋转效果,还有春联效果

使用css的animation和transform和transition可以实现简单的图片放大缩小,旋转,位移的效果,由此可以延伸的动画效果还是挺多的,比如图片慢慢放大,图片慢慢旋转并放大,图片慢慢变化位置等等, 抽奖…

使用pytorch从零开始实现迷你GPT

生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…

MathType 7.5.2中文版软件使用期到了怎么办?

MathType 7.5.2中文版作为一款专业的公式编辑器,MathType受到很多人的青睐,它可以将编辑好的公式保存成多种图片格式或透明图片模式,可以很方便的添加或移除符号、表达式等模板(只需要简单地用鼠标拖进拖出即可),也可以…

Verilog 入门(八)(验证)

文章目录 编写测试验证程序波形产生值序列重复模式 测试验证程序实例从文本文件中读取向量实例:时序检测器 测试验证程序用于测试和验证设计方法的正确性。Verilog 提供强有力的结构来说明测试验证程序。 编写测试验证程序 测试验证程序有三个主要目的:…

Java 表达式引擎

企业的需求往往是多样化且复杂的,对接不同企业时会有不同的定制化的业务模型和流程。我们在业务系统中使用表达式引擎,集中配置管理业务规则,并实现实时决策和计算,可以提高系统的灵活性和响应能力。 引入规则引擎似乎就能解决这个…

UE学习C++(1)创建actor

创建新C类 在 虚幻编辑器 中,点击 文件(File) 下拉菜单,然后选择 新建C类...(New C Class...) 命令: 此时将显示 选择父类(Choose Parent Class) 菜单。可以选择要扩展的…

你知道MySQL 中的 order by 是怎么工作的吗?

欢迎大家到我的博客浏览。order by是怎么工作的? | YinKais Blog今天我们来看一下 MySQL 中 “ order by ” 是怎么工作的。 我们以一个实际的例子,来探讨这个问题: 假设我们的表是这样定义的: CREATE TABLE t (id int(11) NOT…

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历

文章目录 二叉树的存储结构二叉树的顺序存储二叉树的链式存储小结 二叉树的先中后序遍历例题小结 二叉树的层次遍历小结 由遍历序列构造二叉树一个遍历序列即使给定了前中后序,也不能确定该二叉树的形态可以确定的序列组合前序中序后序中序层序中序 小结若前序&…

LeetCode的几道题

一、捡石头 292 思路就是: 谁面对4块石头的时候,谁就输(因为每次就是1-3块石头,如果剩下4块石头,你怎么拿,我都能把剩下的拿走,所以你就要想尽办法让对面面对4块石头的倍数, 比如有…

如何使用手机制作证件照

1、打开vx搜索小🍊x名称:标准证件照免冠照 2、选择你需要的证件照尺寸类型 3.选择手机照片生活照或者点击开始拍摄(建议纯色的墙面好换底色) 4.选择背景颜色,红底,蓝底奉背景颜色随你…

LeetCode力扣每日一题(Java):1、两数之和

一、题目 二、解题思路 方法一&#xff1a;暴力枚举 这是最容易想到的一种方法&#xff0c;本质就是二重循环遍历数组&#xff0c;话不多说直接上代码 public int[] twoSum(int[] nums, int target) {for (int i 0; i < nums.length - 1; i) {for (int j i 1; j < …

纯js实现录屏并保存视频到本地的尝试

前言&#xff1a;先了解下&#xff1a;navigator.mediaDevices&#xff0c;mediaDevices 是 Navigator 只读属性&#xff0c;返回一个 MediaDevices 对象&#xff0c;该对象可提供对相机和麦克风等媒体输入设备的连接访问&#xff0c;也包括屏幕共享。 const media navigator…

【动态规划】LeetCode-931.下降路径最小和

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

Selenium page object模式Python

目录 概述 优点 示例 项目结构&#xff1a; 基础页面类BasePage 业务页面类BaiduHomePage 测试类test_baidu&#xff1a; 文件工具类file_util 运行日志&#xff1a; 测试结果&#xff1a; 概述 在web应用程序的UI中&#xff0c;有一些区域可以与测试交互。页面对象…

神经网络模型预训练

根据神经网络各个层的计算逻辑用程序实现相关的计算&#xff0c;主要是&#xff1a;前向传播计算、反向传播计算、损失计算、精确度计算等&#xff0c;并提供保存超参数到文件中。 # coding: utf-8 import sys, os sys.path.append(os.pardir) # 为了导入父目录的文件而进行的…

2023年12月4日支付宝蚂蚁庄园小课堂小鸡宝宝考考你今日正确答案是什么?

问题&#xff1a;你知道电杆上安装的“小风车”有什么用途吗&#xff1f; 答案&#xff1a;防止鸟类筑巢 解析&#xff1a;小风车一般做成橙色&#xff0c;因为橙色是一种可令野鸟产生恐慌感的颜色&#xff1b;小风车在转动时&#xff0c;会发出令野鸟害怕的噪声&#xff1b;…

【iOS】数据持久化(三)之SQLite3及其使用

目录 数据库简介什么是SQLite&#xff1f;在Xcode引入SQLite APISQL语句的种类存储字段类型 SQLite的使用创建数据库创建表和删表数据表操作增&#xff08;插入数据INSERT&#xff09;删&#xff08;删除数据DELETE&#xff09;改&#xff08;更新数据UPDATE&#xff09;查&…

softmax实现

import matplotlib.pyplot as plt import torch from IPython import display from d2l import torch as d2lbatch_size 256 train_iter,test_iter d2l.load_data_fashion_mnist(batch_size) test_iter.num_workers 0 train_iter.num_workers 0 num_inputs 784 # 将图片…