当前位置: 首页 > news >正文

SpringBoot项目启动后自动执行方法

前言

在SpringBoot项目中,当项目启动后想自动执行某一个方法或任务有多种方式,比如:使用 CommandLineRunner、ApplicationRunner、@PostConstruct、ApplicationListener

本文讲解使用 ApplicationListener ,使 SpringBoot 项目启动后自动运行 onApplicationEvent 方法。

一、实现

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

示例1

下面的代码将在项目启动后自动的打印 “你好!”

import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;@Service
public class AutoRun implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {System.out.println("你好!");}}

示例2

下面的代码将在项目启动后自动运行 onApplicationEvent 方法,该方法里调用线程池每10秒 打印一次 “你好!”

@Configuration
public class TaskExecutorConfig {@Bean(name = "taskExecutor")public ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(25);executor.initialize();return executor;}
}
@Component
public class AutoTask {public void print() {System.out.println("你好!");}
}
@Service
public class AutoRun implements ApplicationListener<ApplicationStartedEvent> {@Qualifier("taskExecutor")@Autowiredprivate ThreadPoolTaskExecutor taskExecutor;@Autowiredprivate AutoTask autoTask;@Overridepublic void onApplicationEvent(ApplicationStartedEvent event) {taskExecutor.execute(() -> {while (!taskExecutor.getThreadPoolExecutor().isShutdown()) {try {Thread.sleep(10000);autoTask.print();} catch (InterruptedException e) {e.printStackTrace();}}});}}

相关文章:

  • 广州自闭症全托管学校-正规儿童康复中心
  • 利用深度学习技术来实现街景图像的语义分割(街景图像语义分割)
  • 基于WonderJourney生成电影级连续的3D场景视频
  • Java学习Day33:HTML 第四章:大战虎先锋(js)
  • 6个免费字体网站,无需担心版权问题~
  • Android 12系统源码_多屏幕(三)模拟辅助设备功能实现原理
  • GitHub开源的PDF管理工具Stirling-pdf
  • Godot模拟实现多人游戏平滑移动
  • SpringData基础学习
  • vue前端更新后需要清空缓存
  • MySQL中 EXPLAIN 的使用介绍
  • oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程
  • 边界dp注意重叠边界
  • Java使用Tesseract进行OCR图片文字识别
  • 老师是怎么分班的?用什么工具比较好?
  • 2019.2.20 c++ 知识梳理
  • avalon2.2的VM生成过程
  • js继承的实现方法
  • Logstash 参考指南(目录)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL用户中的%到底包不包括localhost?
  • Python3爬取英雄联盟英雄皮肤大图
  • SAP云平台里Global Account和Sub Account的关系
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • unity如何实现一个固定宽度的orthagraphic相机
  • webpack4 一点通
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 解决iview多表头动态更改列元素发生的错误
  • 模型微调
  • 那些被忽略的 JavaScript 数组方法细节
  • 配置 PM2 实现代码自动发布
  • 区块链将重新定义世界
  • 如何选择开源的机器学习框架?
  • 如何用vue打造一个移动端音乐播放器
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • #pragma multi_compile #pragma shader_feature
  • (7)STL算法之交换赋值
  • (C语言)字符分类函数
  • (day6) 319. 灯泡开关
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (算法)求1到1亿间的质数或素数
  • (推荐)叮当——中文语音对话机器人
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .net core Redis 使用有序集合实现延迟队列
  • .NET 表达式计算:Expression Evaluator
  • .NET 分布式技术比较
  • .net 简单实现MD5
  • .NET 设计模式初探
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [] 与 [[]], -gt 与 > 的比较