【项目启动执行指定代码】⭐️通过案例测试下常用的实现方式

news2024/12/29 10:45:02

目录

前言

1、监听 ApplicationContext事件

2、实现CommandLineRunner接口

3、实现ApplicationRunner接口

4、使用@PostConstruct注解

章末


前言

        为了保证程序在启动后的稳定性,需要执行初始化操作,像加载配置,建立数据库连接可以在项目启动时实现,另外一个场景就是缓存预热,就是说要提前将热点数据更新到redis缓存中,防止高并发情况下造成缓存击穿,这个过程需要在初始化的时候,执行查询热点数据、更新redis操作,这里常见的实现方式大概有以下几个方法:

1、监听 ApplicationContext事件

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class MyContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
              //todo 指定初始化操作
、            System.out.println("监听到contextRefreshedEvent事件,开始初始化操作--------------------");
    }
}

        创建配置类实现ApplicationListener接口,重写onApplicationEvent()方法,加上@Component注解标识为配置类,这样启动的时候才会扫描到这里

        适用场景:

1.执行一次性初始化操作

        比如加载基础数据,建立连接等可以确保初始化操作在应用程序启动后立即执行

2.初始化缓存等

2、实现CommandLineRunner接口

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        //todo    指定初始化代码
        System.out.println("MyCommandLineRunner调用了run()方法---------------");
    }
}

        重写CommandLineRunner的run方法,也会在springboot 项目启动后执行,方法参数是字符串数组,可以直接获取命令行参数

        适用场景:

 项目完全启动后执行一些需要访问Spring上下文或者命令行参数的任务

3、实现ApplicationRunner接口

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class ApplicationArgumentProcessor implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //todo  初始化操作
        System.out.println("检测到 ApplicationArgumengProcessor 类中的额run方法并执行-------------------------");
    }
}

        ApplicationRunner接口的run方法会在项目启动后执行,可以获取命令行参数

        适用场景:

 比如数据初始化,特定服务的启动等

4、使用@PostConstruct注解

    @Service("userService")
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {
        //...

        @PostConstruct
	public void init(){
		System.out.println("UserService初始化bean后执行----------");
	}
}	

         @PostConstruct 注解用于标记一个方法,该方法会在spring Bean 实例化后立即执行

        适用场景:

在Spring Bean初始化时执行一些操作,比如资源加载,依赖注入等,通常用于单个Bean的初始化

章末

        文章到这里就结束了~

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

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

相关文章

(2024)Ubuntu源码安装多个版本的opencv并切换使用

本人工作会用到x86_64的opencv和aarch64的opencv&#xff0c;所以写下来备忘自用 一、源码编译安装 依赖库安装&#xff1a; sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev o…

简单介绍css及其代码样式

css简介 css用于前端开发&#xff0c;负责对界面进行美化。让页面更美观。 他可以改变html代码的样式&#xff0c;让html代码的网页不那么死板。 css代码格式 选择器 {属性:值; 属性:值&#xff1b;} css的模版架构 css代码放到<style>标签中。 而<style>通常是…

在单交换机局域网中,不同网段的主机通信探秘

在理解局域网中不同网段主机之间的通信之前&#xff0c;我们首先要明白网络的基本组成和工作原理。局域网&#xff08;LAN&#xff09;是一个封闭的网络环境&#xff0c;通常由交换机&#xff08;Switch&#xff09;作为核心设备连接网络中的各个主机。当我们谈论不同网段的主机…

【C#】yield使用

&#x1f4bb;代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace ConsoleApp15 {internal class Program{static void Main(string[] args){IEnumerable<int&…

如何回答孩子“为什么要过清明?”

清明&#xff0c;是中国人寻根问祖的时节。 为什么要过清明节&#xff1f; 不知道你是否认真想过&#xff0c;我们为什么要过清明节呢&#xff1f; 如果当孩子问起时&#xff0c;你又该如何作答呢&#xff1f; 也许&#xff0c;以下的总结可供你参考。 清明&#xff0c;让…

[蓝桥杯 2019 国 C] 数正方形

[蓝桥杯 2019 国 C] 数正方形 题目描述 在一个 N N N \times N NN 的点阵上&#xff0c;取其中 4 4 4 个点恰好组成一个正方形的 4 4 4 个顶点&#xff0c;一共有多少种不同的取法&#xff1f; 由于结果可能非常大&#xff0c;你只需要输出模 1 0 9 7 10^9 7 1097 的…

DasViewer中,像下图山坡是选择拟合平面还是自定义平面?还是其他的基准面?

问题如图 如若山坡是计算斜面的土方&#xff0c;可以选择用拟合平面模式&#xff0c;该模式适用斜坡。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方…

广州到菲律宾海运双清到门,菲律宾双清到门一站式物流

洗衣液出口菲律宾全程海运双清包税到门物流操作流程 为了便于中国的洗衣液产品出口至菲律宾&#xff0c;并实现海运双清包税到门的服务&#xff0c;我们提供一站式的中菲物流解决方案。我们的目标是在保证货物安全的前提下&#xff0c;为您完成从中国起运到菲律宾指定地址的所有…

Java基于微信小程序高校体育场管理小程序

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表

RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表 文章目录 RabbitMQ3.13.0起支持MQTT5.0协议及MQTT5.0特性功能列表1. MQTT概览2. MQTT 5.0 特性1. 特性概要2. Docker中安装RabbitMQ及启用MQTT5.0协议 3. MQTT 5.0 功能列表1. 消息过期1. 描述2. 举例3. 实现 2. 订阅标识…

含风电-光伏-光热电站电力系统N-k安全优化调度模型

目录 1 主要内容 2 部分程序 3 部分结果 4 下载链接 1 主要内容 该程序参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型&#xff0c;主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型&#xff0c;从而体现光热电站在调度灵活性以及经…

Linux 常用指令及其理论知识

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;http://t.csdnimg.cn/Tvyou 欢迎各位指教&#xff01;&#xff01;&#xff01; 目录 一、理论知识 二、基础指令 1、ls指令&#xff08;列出该目录下的所有子目录和文件&#xff09; 语法&#xff1a; …

扫描电镜如何能拍到样品的好的形貌?

扫描电镜是表征材料微观形貌的有力工具&#xff0c;它能够呈现样品的精细结构。然而&#xff0c;要拍摄出高质量的样品形貌并非易事&#xff0c;除了要熟悉扫描电镜的各种功能&#xff0c;还需要掌握一些技巧。本文将介绍如何利用景深、倾斜校正、动态聚焦等功能以及合轴和消像…

ZS65-40-125/1.5卧式单级不锈钢离心泵

首先&#xff0c;让我们解析这款离心泵的基本参数。ZS65-40-125/1.5标识着该泵型的特定性能特征。ZS代表这是一种卧式单级离心泵&#xff1b;65表示泵的进口直径为65毫米&#xff0c;确保了足够的介质流入量&#xff1b;40是指出水口直径为40毫米&#xff0c;设计以适应特定的系…

吴恩达2022机器学习专项课程(一) 第二周课程实验:多元线性回归(Lab_02)

1.训练集 使用Numpy数组存储数据集。 2.打印数组 打印两个数组的形状和数据。 3.初始化w&#xff0c;b 为了演示&#xff0c;w&#xff0c;b预设出接近最优解的值。w是一个一维数组&#xff0c;w个数对应特征个数。 4.非向量化计算多元线性回归函数 使用for循环&…

盲盒小程序开发:年轻人成为盲盒主力军

当下&#xff0c;在各种生活压力下&#xff0c;大众的消费逐渐倾向于情绪价值较高的娱乐消费上&#xff0c;不仅可以解压&#xff0c;还可以带来更多的惊喜感。 盲盒的主要受众群体是年轻人&#xff0c;购买能力非常高&#xff0c;盲盒的营收也在成倍的增加&#xff0c;发展前…

MES实施之工控机和电脑的选择

在MES项目实施过程中,经常会碰到工控机和电脑的选型问题,那么他们的区别是什么? 1、控机和普通个人电脑(PC)相比,具有以下几个区别: 1.运行环境不同:工控机通常需要在各种恶劣的工业环境中运行,如高温、高湿、强电磁干扰等,因此需要具有防尘、防水、抗干扰等特点。而…

c++线程基础知识

1. joinable()函数 int LocalOptimizationProcess::Stop() {stop_thread_ true;cond_.notify_all();LOGD("LocalOptimizationProcess Thread Join()");if (thread_->joinable()){thread_->join();}LOGD("LocalOptimizationProcess Thread Stoped")…

实时计算平台设计方案:911-基于6U VPX的光纤图像DSP实时计算平台

基于6U VPX的光纤图像DSP实时计算平台 一、系统组成 该平台基于风冷式的 6U 6槽VPX图像处理平台&#xff0c;包括&#xff1a;计算机主板、计算机主板后板、存储板、图像信号处理板、图像信号处理板后板、图像光纤转接板、机箱背板及机箱组成。图1为系统背板结构示意图&…

SAP FICO应收票据平台开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

效果展示 应收票据 应收汇票录入界面创建 应收汇票录入界面更改 应收汇票录入界面显示 应收票据批量上载 <