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

Spring Boot中如何实现定时任务?

在项目开发中,经常需要编写定时任务来实现一些功能:

  • 定时备份数据库、定时发送邮件、定时清理数据、定时提醒或通知、信用卡每月还款提醒

  • 未支付的订单15分钟之后自动取消、未确认收货的订单7天之后自动确认收货

定时任务的实现:

  • Spring Task框架:Spring提供的任务调度工具,可以按照约定的时间自动执行特定的任务功能

  • Quartz框架:一个开源的任务调度框架

  • ScheduledThreadPoolExecutor:JDK8提供的定时任务执行

Cron表达式是一个字符串,由7个字段组成,使用空格隔开 ,用于指定定时任务的执行时间。也称为七子表达式

字段取值范围说明
0-59*/10
0-59
0-236-16
1-31
1-12
星期0-70和7都表示星期日
1970~2099此项非必需,可以省略

使用以下特殊字符来指定执行时间:

  • 星号(*):表示匹配该字段的所有可能值

  • 问号(?):表示不关心该字段具体的值

  • 斜线(/):表示指定一个间隔

  • 逗号(,):表示列举多个值

  • 连字符(-):表示指定一个范围

Cron表达式在线生成器:在线Cron表达式生成器

 基本用法

Spring Task的使用步骤:

  1. 定制任务,使用@Scheduled

    @Component
    public class MyTask {
    ​// @Scheduled(cron = "0/2 * * * * ?") // 每隔2秒执行一次@Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3点执行public void task1() {System.out.println("定时任务1执行了!");}
    ​
    }
  2. 启用定时任务,使用@EnableScheduling

    @SpringBootApplication
    @EnableScheduling // 开启定时任务
    public class Springboot02QuickApplication {
    ​public static void main(String[] args) {SpringApplication.run(Springboot02QuickApplication.class, args);}
    ​
    }

相关文章:

  • el-select 组件获取整个对象
  • 模型实战(20)之 yolov8分类模型训练自己的数据集
  • yolov8+ROS+ubuntu18.04——学习记录
  • Redis篇 String
  • .Net Core 中间件与过滤器
  • 02 FreeRTOS 任务
  • PyCharm面板ctrl+鼠标滚轮放大缩小代码
  • 基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码
  • three.js官方案例webgl_loader_fbx.html学习
  • Docker打包之后如何将进行变成压缩包进行传输和使用?
  • XSKY CTO 在英特尔存储技术峰会的演讲:LLM 存储,架构至关重要
  • 人脸识别技术的前沿技术和应用场景
  • 华为交换机、路由器开局(基础配置及远程登录)
  • OrangePi AIpro评测 - 基础操作篇
  • OpenHarmony 实战开发——内核对象队列之算法详解
  • bearychat的java client
  • CSS中外联样式表代表的含义
  • IOS评论框不贴底(ios12新bug)
  • Java到底能干嘛?
  • Mybatis初体验
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Mysql数据库的条件查询语句
  • mysql中InnoDB引擎中页的概念
  • Node + FFmpeg 实现Canvas动画导出视频
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • vue-loader 源码解析系列之 selector
  • 安装python包到指定虚拟环境
  • 开源地图数据可视化库——mapnik
  • 如何在 Tornado 中实现 Middleware
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 思考 CSS 架构
  • 小程序01:wepy框架整合iview webapp UI
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 主流的CSS水平和垂直居中技术大全
  • ​Spring Boot 分片上传文件
  • ​渐进式Web应用PWA的未来
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #if和#ifdef区别
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (007)XHTML文档之标题——h1~h6
  • (20)docke容器
  • (55)MOS管专题--->(10)MOS管的封装
  • (70min)字节暑假实习二面(已挂)
  • (day6) 319. 灯泡开关
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (简单) HDU 2612 Find a way,BFS。
  • (九)One-Wire总线-DS18B20
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (学习日记)2024.01.19
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原)本想说脏话,奈何已放下
  • (转)母版页和相对路径