确保Spring Boot定时任务只执行一次方案

在Spring Boot项目中,确保定时任务只执行一次是一个常见的需求。这种需求可以通过多种方式来实现,以下是一些常见的方法,它们各具特点,可以根据项目的实际需求来选择最合适的方法。

1. 使用@Scheduled注解并设置极大延迟

一种简单的方法是利用@Scheduled注解,但将延迟时间设置为一个非常大的值,如Long.MAX_VALUE,从而确保任务只执行一次。以下是示例代码:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class MyScheduledTask {@Scheduled(fixedDelay = Long.MAX_VALUE)public void myTask() {// 这里编写你的任务逻辑System.out.println("执行只执行一次的任务");}
}

在上述代码中,fixedDelay属性被设置为Long.MAX_VALUE,这意味着任务在首次执行后将有一个极大的延迟,实际上就相当于只执行一次。另外,请确保在Spring Boot的主应用程序类上添加@EnableScheduling注解,以启用定时任务的支持。

2. 使用TaskScheduler接口

对于需要更高灵活性的场景,可以使用Spring的TaskScheduler接口。这种方法允许你以编程方式安排任务,并指定任务的开始时间。以下是一个示例:

import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;import java.time.Instant;@Component
public class TaskComponent {private TaskScheduler taskScheduler = new ThreadPoolTaskScheduler();public void schedule(Runnable task, Instant startTime) {taskScheduler.schedule(task, startTime);}
}

在使用时,你可以通过创建一个Runnable任务和一个具体的Instant开始时间来安排任务:

// 假设当前时间后2秒执行任务
Instant startTime = Instant.now().plusSeconds(2);
taskComponent.schedule(() -> {// 这里编写你的任务逻辑System.out.println("执行只执行一次的任务");
}, startTime);

3. 使用@PostConstruct注解

如果你的任务是在Bean初始化时就需要执行的一次性任务,那么可以使用@PostConstruct注解。这个方法会在Bean初始化后立即执行,适用于一次性的初始化任务。

import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;@Component
public class MyInitTask {@PostConstructpublic void init() {// 执行只执行一次的初始化任务System.out.println("执行只执行一次的初始化任务");}
}

4. 实现ApplicationRunner接口

另外,你还可以创建一个实现ApplicationRunner接口的类,在run方法中执行只执行一次的任务。这个方法会在Spring Boot应用程序启动后执行一次。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {// 执行只执行一次的任务System.out.println("执行只执行一次的任务");}
}

总结

确保Spring Boot定时任务只执行一次有多种方法,你可以根据实际需求选择最适合的方法。如果你需要更复杂的任务调度或周期性执行,@Scheduled注解和TaskScheduler接口是更合适的选择。而对于一次性的初始化任务或应用程序启动任务,@PostConstruct注解和实现ApplicationRunner接口则更为简洁明了。

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

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

相关文章

【C++ 11】移动构造函数

文章目录 【 1. 问题背景:深拷贝引起的内存开销问题 】【 2. 移动构造函数 】【 3. 左值的移动构造函数: move 实现 】 【 1. 问题背景:深拷贝引起的内存开销问题 】 拷贝构造函数 在 C 11 标准之前(C 98/03 标准中),…

不再手动处理繁琐任务!Python自动化方案梳理

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 文件和文件夹操作📝 Web自动化📝 自动化办公任务📝 网络请求和API调用📝 任务调度📝 桌面自动化📝 邮件自动化⚓️ 相关链接 ⚓️📖 介绍 📖 想象一下,只需一个Python程序,就能让你的电脑自…

深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释) 样本量: 8005 # # 1.导入数据集(加载图片)数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, # 同时对图片数值进行归一化[0:1] from tensorflow.keras.preprocessing.image …

Mysql 和MongoDB用户访问权限问题

Mysql 刚给二线运维排查了一个问题,Mysql安装完可用,且可用navicat连接,项目中通过127.0.0.1去连数据库报错了。错误是access denied for user ‘root’localhost,排查思路 1. 密码是否正确 (不需要重置。到Mysql的安装目录下找…

软件I2C的代码

I2C的函数 GPIO的配置——scl和sda都配置为开漏输出 void MyI2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStruture.GPIO_PinGPIO_Pin_10 | GPIO_Pin_…

Linux服务器前后端项目部署vue+springboot—搭建服务器上的运行环境(JDK、Redis、MySQL、Nginx)

Linux服务器前后端项目部署—①搭建服务器上的运行环境 一、系统参数信息和使用工具 1、服务器信息 华为云 CenteOS7.8 64 配置信息:2核4G 2、使用工具 Xshell6 二、环境安装和配置 (一)JDK的下载和安装 1、创建一个新目录或者进入目…

Spring event实战

什么是spring event? Spring Event 是 Spring 框架提供的一种事件驱动编程模型。它允许应用程序中的组件通过发布和监听事件来进行松耦合的交互。这种机制基于观察者设计模式,其中组件可以扮演事件发布者的角色,而其他组件则作为事件监听器来…

UEFI BIOSAPP编程开发查询手册.pdf

UEFI BIOS&APP编程开发查询手册.pdf 独家整理推荐。 享受, 半年免费更新服务, 一年免费咨询服务。

django5入门【03】新建一个hello界面

注意 ⭐前提:将上节的项目导入到pycharm中操作步骤总结: 1、HelloDjango/HelloDjango目录下,新建一个views.py 2、HelloDjango/HelloDjango/urls.py 文件中,配置url路由信息 3、新建终端,执行运行命令python manag…

RuoYi-Vue若依 环境搭建 速成

一、若依简介 RuoYi-Vue 是一个开源的后台管理系统,适用于快速开发企业级应用。该平台由两部分组成:前端和后端。 (1)技术框架 前端技术: Vue.js: 前端框架使用 Vue.js,这是一种流行的JavaScript框架&a…

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式,支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器,将云数据库RDS中的订单数据和表结构变更导入Paimon表中,并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

(46)MATLAB仿真从正弦波转换为方波

文章目录 前言一、MATLAB代码二、仿真结果画图三、吉布斯效应 前言 本文使用MATLAB仿真的方法,给出从正弦波转换为方波的过程,说明方波的傅里叶级数展开式是如何由奇次谐波的和构成的。另外,说明了在此过程中的吉布斯效应。 一、MATLAB代码 …

pm2 部署vue

1、为什么要使用pm2运行vue项目 为什么!!!我们一般是将打出来的DIST目录上传到服务器发布即可,为啥我会使用PM2来运行部署呢? 前提:vue2mysqlexpress不使用中间服务器,即不要后端人员开发接口服…

Bands Page 乐队页面

“带区”页面提供了用于添加和删除带区、自定义带区设置以及更改带区和列布局的设计时工具。此页面如下图所示。 该页面说明了一个预览部分、一个用于访问所选频段设置的属性网格以及一组按钮,这些按钮提供了下面列表中描述的功能。 添加新乐队…- 创建新带。创建新…

Elasticsearch使用实战以及代码详解

Elasticsearch 是一个使用 Java 语言编写、遵守 Apache 协议、支持 RESTful 风格的分布式全文搜索和分析引擎,它基于 Lucene 库构建,并提供多种语言的 API。Elasticsearch 可以对任何类型的数据进行索引、查询和聚合分析,无论是文本、数字、地…

【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的

目录 1、问题 2、解决方法 1、问题 写论文的时候,有时会出现乱码的情况, 如下图,这种情况, 可是 在打印预览的时候,就显示的正常 如下图, 2、解决方法 既然是文档正文显示错误,显示乱码&…

【HarmonyOS NEXT】服务端向终端推送消息——获取Push Token

【需求】 获取Push Token 【文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-get-token-V5 【代码】 // EntryAbility.ets 文件 import { pushService } from kit.PushKit; export default class EntryAbility extends UIAbility {onCreat…

【详解】下载MySql安装教程(帮助数据库下载)

此版本是我下载的版本,其他版本均可以。 1.官网下载相应的版本:MYSQL:8.0.33 https://www.mysql.com/ 2.点击DOWNLOADS进入 3.在上述界面当中往下翻,找到社区版的下载界面 4.点进社区版的界面 前三个是Linux系统下的安装&a…

1.centos 镜像

centos 它有官网的下载地址:https://vault.centos.org/ 选择想要的版本,我选择 centos7.8 进入到镜像目录 isos 选择 x86_64 选择想要的版本,我选择 CentOS-7-x86_64-DVD-2003.iso 安装就正常安装就行。我选择虚拟机安装。这个参考&…

git的安装以及入门使用

文章目录 git的安装以及入门使用什么是git?git安装git官网 git初始化配置使用方式初始化配置: git的安装以及入门使用 什么是git? Git 是一个免费开源的分布式版本控制系统,使用特殊的仓库数据库记录文件变化。它记录每个文件的…