Spring Boot应用启动时自动执行代码的五种方式

Spring Boot为开发者提供了多种方式在应用启动时执行自定义代码,这些方式包括注解、接口实现和事件监听器。在本篇博客中,我们将探讨一些常见的方法,以及如何利用它们在应用启动时执行初始化逻辑。

1.  @PostConstruct注解

`@PostConstruct`注解可以标注在方法上,该方法将在类被初始化后调用。在Spring Boot应用中,你可以使用这个注解来执行一些初始化的逻辑。

@PostConstruct
public void doSomething(){// 在应用启动后执行的代码System.out.println("do something");
}

2.  ApplicationListener接口

实现`ApplicationListener`接口并监听`ApplicationStartedEvent`事件,这样你的逻辑将在应用启动后被触发。

import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {// 在应用启动后执行的代码System.out.println("ApplicationListener executed");}
}

 3.  @EventListener注解

使用`@EventListener`注解,可以将方法标记为事件监听器,并在特定事件发生时执行。

import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.event.EventListener;public class MyEventListener {@EventListener(ApplicationStartedEvent.class)public void onApplicationEvent() {// 在应用启动后执行的代码System.out.println("@EventListener executed");}
}

4.  ApplicationRunner接口

实现`ApplicationRunner`接口,该接口的`run`方法会在Spring Boot应用启动后执行。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {// 在应用启动后执行的代码System.out.println("ApplicationRunner executed");}
}

5.  CommandLineRunner接口

与`ApplicationRunner`类似,`CommandLineRunner`接口的`run`方法也在应用启动后执行。

public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {// 在应用启动后执行的代码System.out.println("CommandLineRunner executed");}
}

Demo代码

 完整如下

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;import javax.annotation.PostConstruct;@SpringBootApplication
public class Application implementsApplicationListener<ApplicationStartedEvent>,CommandLineRunner,ApplicationRunner
{/*** 本次执行先后顺序为(没有设置order)* PostConstruct、ApplicationListener、@EventListener注解、ApplicationRunner、CommandLineRunner* @param args*/public static void main(String[] args) {SpringApplication.run(Application.class, args);}@PostConstructpublic void doSomething(){// 在应用启动后执行的代码System.out.println("do something 11111111111");System.out.println("PostConstruct注解启动");System.out.println("===============");}@EventListener(ApplicationStartedEvent.class)public void onApplicationEvent() {// 在应用启动后执行的代码System.out.println("do something 22222222222");System.out.println("@EventListener 注解启动 executed");System.out.println("===============");}@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {// 在应用启动后执行的代码System.out.println("do something 3333333333");System.out.println("ApplicationListener executed");System.out.println("===============");}@Overridepublic void run(String... args) throws Exception {// 在应用启动后执行的代码System.out.println("do something 44444444");System.out.println("CommandLineRunner启动");System.out.println("===============");}@Overridepublic void run(ApplicationArguments args) throws Exception {// 在应用启动后执行的代码System.out.println("do something 55555555");System.out.println("ApplicationRunner启动");System.out.println("===============");}
}

Demo分析

  1. @PostConstruct注解方法 (doSomething方法) 在类初始化后被调用,因此会首先输出。

  2. ApplicationListener接口方法 (onApplicationEvent方法) 在应用启动后执行,会输出其相关的信息。

  3. @EventListener注解方法 (onApplicationEvent方法) 同样在应用启动后执行,会输出其相关的信息。

  4. ApplicationRunner接口方法 (run方法) 在ApplicationListener之后执行,它用于在Spring Boot应用启动后执行一些额外的逻辑。

  5. CommandLineRunner接口方法 (run方法) 也在ApplicationListener之后执行,用于在Spring Boot应用启动后执行一些额外的逻辑。

总结

通过以上几种方式,你可以根据项目的需求选择合适的初始化方法。无论是使用注解、接口实现,还是事件监听器,Spring Boot提供了灵活的机制来管理应用启动时的自定义逻辑,使得开发者能够更方便地控制应用的初始化过程。在实际项目中,通常根据具体场景选择其中一种或多种方式,以满足不同的需求。

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

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

相关文章

Excel·VBA按指定顺序排序函数

与之前写过的《ExcelVBA数组冒泡排序函数》不同&#xff0c;不是按照数值大小的升序/降序对数组进行排序&#xff0c;而是按照指定数组的顺序&#xff0c;对另一个数组进行排序 以下代码调用了《ExcelVBA数组冒泡排序函数》bubble_sort_arr函数&#xff08;如需使用代码需复制…

管理系统-基于javaweb的图书管理系统

基于javaweb的图书管理系统 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 本项目采用eclipse工具开发&#xff0c;jspservlet技术编写&#xff0c;样式采用了layui…

python总结-生成器与迭代器

生成器与迭代器 生成器生成器定义为什么要有生成器创建生成器的方式一(生成器表达式) 创建生成器的方式二(生成器函数)生成器函数的工作原理总结 迭代器概念可迭代对象和迭代器区别for循环的本质创建一个迭代器 动态添加属性和方法运行过程中给对象、类添加属性和方法types.Met…

MySQL练习-DDL语法练习

文章目录 1、数据库操作2、表操作3、DDL数据类型 突然想起来好久没写过SQL了&#xff0c;写一下SQL练习一下&#x1f60a; 个人写sql比较喜欢用小写&#x1f601; 什么是DDL&#xff1a;DDL是对数据库和表的操作 在这里练习DLL的时候先不添加约束&#xff0c;后面会把约束集中…

Lumerical------关闭 drawing grid 去更好地显示 mesh grid

Lumerical------关闭 drawing grid 去更好地显示 mesh grid 引言正文 引言 在 Lumerical 结构设置的时候&#xff0c;有时候我们想要查看 mesh 结构的 grid&#xff0c;但是本身默认的 dtawing grid 黑框会阻碍我们的观察&#xff0c;这时&#xff0c;我们便可以通过设置关闭这…

2024阿里云服务器可用区选择方法

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

CAD安装教程

CAD安装教程 目录 一&#xff0e; 下载CAD二&#xff0e; 安装CAD 一&#xff0e; 下载CAD 如果需要CAD安装包请私信。 二&#xff0e; 安装CAD 解压压缩包AutoCAD2022中文版&#xff0c;以管理员身份运行AutoCAD_2022_Simplified_Chinese_Win_64bit_dlm.sfx。 选择解压路径。…

计算机毕业设计----SSM场地预订管理系统

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 按分类查看场地,用户登录,查看网站公告,按分类查看器材,查看商品详情,加入购物车,提交订单,查看订单,修改个人信息等功能。 管理员角…

简单 Web Server 程序的设计与实现 (2024)

1.题目描述 Web 服务是 Internet 最方便与受用户欢迎的服务类型&#xff0c;它的影响力也远远超出了专业技术范畴&#xff0c; 已广泛应用于电子商务、远程教育、远程医疗与信息服务等领域&#xff0c;并且有继续扩大的趋势。目前很多 的 Internet 应用都是基于 Web 技术的&…

Javaweb之Mybatis的XML配置文件的详细解析

2. Mybatis的XML配置文件 Mybatis的开发有两种方式&#xff1a; 注解 XML 2.1 XML配置文件规范 使用Mybatis的注解方式&#xff0c;主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能&#xff0c;建议使用XML来配置映射语句&#xff0c;也就是将SQL语句写在…

案例098:基于微信小程序的电子购物系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

大学物理实验重点——电路暂态过程

RC串联电路的暂态过程&#xff1a; RLC串联电路的暂态过程&#xff1a; 三种解&#xff1a; 半衰期测量法测量时间常数&#xff1a; 测振荡周期&#xff1a; 不断增大电阻直至振荡凸起峰刚好消失&#xff0c;此时即为临界阻尼状态&#xff0c;记下电阻箱的阻值R&#xff0c;…