SpringBoot学习记录(3)

SpringBoot监听机制

SpringBoot的监听机制,其实是对java提供的事件监听机制的封装

java监听机制

  • java中的事件监听机制定义了以下几个角色

    • 事件:Event,继承java.util.EventObject类的对象

    • 事件源:Source,任意对象Object

    • 监听器:Listener,实现java.util.EventListener对象

SpringBoot监听机制

SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作

监听器接口:ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner

  • ApplicationContextInitializer
    • 这个接口允许在应用程序上下文被创建之前对其进行定制和配置
    • 可以用来做一些初始化的工作,例如添加自定义属性源、激活特定的Spring配置文件等
    • 通过实现这个接口,可以在Spring应用程序上下文被创建之前对其进行自定义设置
补充:在java中,"上下文对象"通常是指一种数据结构或对象,用于存储和传递在特定环境中的相关信息或状态。这个概念在不同的技术和框架中有不同的具体实现和用法。在一些情况下,上下文对象可以是一个普通的 Java 对象,用于存储和传递方法调用或处理过程中的相关信息。例如,在多线程编程中,可以创建一个包含线程状态、线程局部变量等信息的上下文对象,以便在方法调用之间传递这些信息。在一些框架和技术中,上下文对象可能具有更具体的含义和功能。例如:
1.Servlet 上下文对象:在 Java Web 开发中,Servlet 上下文对象是用于存储 Servlet 环境相关信息的对象。它可以通过 ServletContext 接口来访问,其中包含了 Servlet 容器的一些配置信息、Servlet 的初始化参数等。2.Spring 应用程序上下文对象:在 Spring 框架中,应用程序上下文对象是 Spring IoC 容器中的一个重要组成部分,用于管理和维护 Bean 的定义、依赖关系等信息。它可以通过 ApplicationContext 接口来访问,其中包含了应用程序中所有 Bean 的定义、配置信息等。3.数据库连接上下文对象:在使用 JDBC 进行数据库操作时,可以创建一个数据库连接上下文对象,用于管理数据库连接的状态、事务信息等。总的来说,上下文对象是一种在特定环境中存储和传递相关信息的通用机制,在不同的技术和框架中具有不同的实现和用法。它可以帮助组织和管理程序执行过程中的状态和信息,提高代码的灵活性和可维护性。
  • SpringApplicationRunListener

    • 这个接口用于监听SpringBoot应用程序的启动过程中的事件,例如应用程序启动、运行失败等
    • 可以用来实现一些高级的应用程序启动时的逻辑,例如记录日志、发送通知等
    • 通过实现这个接口,可以在应用程序启动的各个阶段添加自定义行为
  • CommandLineRunner

    • 这是一个函数式接口,用于在SpringBoot应用程序启动后立即执行一些逻辑
    • 它提供了一个**‘run’**方法,该方法会在SpringBoot应用程序启动后立即执行,且可以访问应用程序启动时的命令行参数
    • 可以用来实现一些与命令行相关的初始化工作,例如加载数据、执行特定任务等
补充:函数式接口(Functional Interface)是指仅包含一个抽象方法的接口。Java 8 引入了函数式接口的概念,以支持函数式编程风格和Lambda表达式。函数式接口通常用于表示可以作为Lambda表达式传递的类型,或者作为方法引用的目标类型。函数式接口具有以下特征:
1.只包含一个抽象方法:函数式接口只能包含一个未实现的抽象方法。它可以包含多个默认方法或静态方法,但只能有一个抽象方法。
2.可以使用@FunctionalInterface注解:虽然不是必须的,但通常将函数式接口标记为@FunctionalInterface注解,以便编译器检查它是否符合函数式接口的要求。如果一个接口标记为@FunctionalInterface,但它不符合函数式接口的要求(例如包含多个抽象方法),编译器将产生错误。
3.Lambda表达式和方法引用的目标类型:函数式接口可以被用作Lambda表达式的类型。Lambda表达式提供了一种简洁的语法来实现函数式接口的抽象方法。同样,函数式接口也可以是方法引用的目标类型。
  • ApplicationRunner
    • 与**‘CommandLineRunner’**类似,也是用于在SpringBoot应用程序启动后立即执行一些逻辑的接口
    • 不同之处在于,‘ApplicationRunner’’run’方法接受的参数是’ApplicationArguments’,而不是简单的字符串数组
    • **‘ApplicationArguments’**提供了更丰富的访问应用程序启动时的参数信息的能力,例如访问非标准选项、参数值的类型转换等

要使上面四种监听器接口中的ApplicationContextInitializer和SpringApplicationRunListener生效,需要在配置META-INF文件夹和其中的spring.factories

SpringBoot启动流程分析

参考12-SpringBoot流程分析-初始化_哔哩哔哩_bilibili的P29-P30

SpringBoot监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、bean加载情况、配置属性、日志信息等

使用步骤

  • 导入依赖坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 访问

    http://localhost:8080/actuator
    

SpringBoot项目部署

SpringBoot项目开发完毕后,支持两种方式部署到服务器:

  • jar包
  • war包

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

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

相关文章

【联合索引】最左匹配原则是什么?

什么是联合索引 联合索引&#xff08;Composite Index&#xff09;是一种索引类型&#xff0c;它由多个列组成。 MySQL的联合索引&#xff08;也称为复合索引&#xff09;是建立在多个字段上的索引。这种索引类型允许数据库在查询时同时考虑多个列的值&#xff0c;从而提高查询…

Linux系统监控命令详解

Linux系统监控命令详解 一、引言 在Linux系统中&#xff0c;系统监控是保障系统稳定运行、提高资源利用率、预防故障发生的重要手段。本文将详细解析Linux系统监控命令&#xff0c;探讨如何更有效地进行系统监控。 二、Linux系统监控概述 Linux系统监控主要包括对CPU、内存…

怎么下载抖音直播视频 怎么解析直播间链接的视频录制保存

尊敬的读者们&#xff0c;你们好&#xff01;今天我们将探讨一个非常实用的技巧——如何下载直播视频。随着网络技术的发展&#xff0c;直播视频已经成为我们日常生活中不可或缺的一部分。无论是观看比赛、欣赏音乐会还是探索新的美食&#xff0c;直播视频都为我们提供了更直观…

UE5缺少SDK,而无法在windows平台打包的解决方法

问题1&#xff1a;UE5缺少SDK&#xff0c;而无法在windows平台打包的解决方法&#xff08;项目问题&#xff0c;做一下记录&#xff0c;没有参考性&#xff09; (1)打不开&#xff1a;D:\imageworks-OpenColorIO-Configs-v1.0_r2-8-g0bb079c.tar 解决方案&#xff1a;从23拷贝D…

嵌入式数据库概念和基本命令的使用

文章目录 前言一、sqlite数据库概念二、sqlite数据库命令分类和使用1.命令分类1. 系统命令&#xff1a;2. SQLite 命令&#xff1a; 2.系统命令的使用3.sqlite命令的使用 三、sqlite C语言函数的使用和编程方法总结 前言 本篇文章将为大家讲解嵌入式数据库的使用&#xff0c;嵌…

非常简单的长期兼职,无脑复制粘贴,每天稳定200-300+

带货这个概念已经不再陌生&#xff0c;许多人对此产生了浓厚的兴趣。今天&#xff0c;我将向大家介绍一个百家号带货项目&#xff0c;这是我一位朋友正在操作的项目。最近与他交流后&#xff0c;我觉得这个项目具有相当的操作性。他并非只运营了一个账号&#xff0c;而是同时管…

5月13日,每日信息差

第一、北京近期发生一起诈骗案件&#xff0c;犯罪分子伪装成宽带维修人员&#xff0c;上门为老人安装 VOIP 设备&#xff0c;以此从事电信诈骗活动。设备安装后&#xff0c;会使家庭网络被用于诈骗&#xff0c;且因设备隐蔽安装在居民家中难以察觉。目前&#xff0c;嫌疑人已被…

Python 错误 TypeError 解析,实际错误实例详解 (二)

文章目录 前言Python 错误 TypeError: Decoding Unicode Is Not SupportedPython 中 TypeError: decoding Unicode is not supported 错误修复 Python 中 TypeError: decoding Unicode is not supportedPython 错误 TypeError: ‘map‘ object Is Not SubscriptablePython 中出…

poi导出word 详细教程

文章目录 HWPFHWPF的基本概念基本操作引入的依赖读取Word文档创建Word文档修改Word文档 高级操作操作表格格式化文本 XWPFHWPF的基本概念基本操作读取Word文档创建Word文档修改Word文档 高级操作操作表格格式化文本 HWPF HWPF的基本概念 HWPF是Apache POI项目中的一个组件&am…

东芝移动硬盘数据恢复方法有哪些

谁能懂我此刻的心情啊&#xff01;移动硬盘用起来真的超级方便&#xff0c;如今我的工作几乎都离不开它&#xff0c;用来存放各种重要文件。可是&#xff0c;让人头疼的事情发生了&#xff0c;昨天我发现移动硬盘里的部分数据竟然莫名其妙地消失了&#xff01;这可咋整啊&#…

tonemapping相关

参考 tone mapping thinkingACES Filmic Tone Mapping Curvefilmic-tonemapping-with-piecewise-power-curvesGDC high dynamic range

MySQL解析JSON格式字段并取出部分值

在MySQL中&#xff0c;从JSON格式的字段中提取数据可以使用JSON_EXTRACT()函数&#xff0c;或者使用->操作符。以下是一些示例&#xff1a; 假设你有一个名为mytable的表&#xff0c;其中有一个json_data字段&#xff0c;它的数据类型是JSON&#xff0c;并且包含了一个JSON…

【GD32】03 - EXTI外部中断

EXTI EXTI&#xff0c;全称External Interrupt/Event Controller&#xff0c;即外部中断/事件控制器&#xff0c;是微控制器中的一个重要组成部分。它主要用于管理来自外部设备的中断和事件请求。以下是关于EXTI的详细介绍&#xff1a; 功能概述&#xff1a; EXTI管理了控制器的…

n的阶乘(函数)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明n的阶乘函数fac; int fac(int n);int main() {//初始化变量值&#xff1b;int n, result;//获取要阶乘的数&#xff1b;printf("请输入要阶乘的n&…

Excel中的`MMULT`函数

Excel中的MMULT函数是一个用于执行矩阵乘法运算的函数。矩阵乘法是线性代数中的一个基本运算&#xff0c;它允许我们计算两个矩阵的乘积&#xff0c;得到一个新的矩阵。与普通的标量乘法不同&#xff0c;矩阵乘法涉及到行与列的对应元素相乘然后求和的过程。MMULT函数在进行数据…

Circuitbreaker Resilience4j 替换Netflix Hystrix

Spring cloud 早已经不支持也不维护Netflix Hystrix了。但是项目中一直用openfeign&#xff0c; Feign里的fallback原来一直用Hystrix做熔断。怎么找到一个可以替换hystrix相同的东西呢&#xff1f;用CricuitBreaker Resilience4j可以完全替换。 在pom.xml中加入spring-cloud-…

Python中进程类Process的方法与属性的使用示例

一、示例代码&#xff1a; from multiprocessing import Process import time import osdef child_1(interval):print(子进程&#xff08;%s&#xff09;开始执行&#xff0c;父进程为&#xff08;%s&#xff09; % (os.getpid(), os.getppid()))t_start time.time()time.sle…

在Ubuntu下搭建自己的以太坊私有链

最近要对链及链上应用进行压测,为了方便操作及分析问题,就自己搭建了一个eth私链。当前版本安装官方指引发现有卡点,于是决定整理一个文档,为其他有需要的朋友提供便捷操作,节约时间。 一、环境配置 linux操作系统:Ubuntu 20.04.6 LTS (Focal Fossa) go version: go1…

【VUE.js】---

问题 vue.config.js 文件中使用了 vue/cli-service 的新特性 defineConfig&#xff0c;但是你的项目依赖版本过旧。 defineConfig 是一个用于定义 Vue CLI 项目配置的辅助函数&#xff0c;它可以帮助 TypeScript 用户更好地获取类型提示。但是&#xff0c;你使用的是 Vue CLI 的…

shell脚本中条件语句

一.test测试 在Shell脚本中&#xff0c;test命令用于进行条件测试。它也可以通过方括号[]来表示&#xff0c;因为test实际上是[命令的一个别名。 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 注意[ ]空格&#xff0c;否则会失败 测试 是否成功使用…