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

JAVA后端开发——用 Spring Boot 实现定时任务

在后端开发中,执行定时任务是一个极其常见的需求,无论是每日的数据报表生成、定时的缓存清理,还是自动化同步第三方数据。借助 Spring Boot 内置的强大功能,我们只需几个简单的注解,就能实现稳定、可靠且极易维护的定时任务。

第一步:开启定时任务的总开关 (@EnableScheduling)

我们首先要告诉 Spring Boot:“嘿,我准备在这个项目里使用定时任务功能了,请帮我把相关的组件都准备好!”

这个“通知”的动作,通过一个简单的注解就能完成。找到你的 Spring Boot 项目的主启动类(通常是名为 ...Application.java 的文件),在类的声明上方添加 @EnableScheduling 注解。

package com.ruoyi;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling; // 1. 导入注解/*** 启动程序*/
@SpringBootApplication
@EnableScheduling // 2. 加上这个注解,开启定时任务功能!
public class RuoYiApplication {public static void main(String[] args) {SpringApplication.run(RuoYiApplication.class, args);}
}

原理:@EnableScheduling 注解就像一个总开关。一旦加上它,Spring Boot 在启动时就会自动创建一个后台任务调度器(Task Scheduler)。这个调度器会时刻准备着,去发现并执行我们后续定义的具体任务。

切记:如果没有这一步,后面所有的配置都将是徒劳!

第二步:创建你的任务执行类 (@Component)

接下来,我们需要一个专门的类来存放我们的定时任务逻辑。这个类必须是一个能被 Spring 容器管理的 Bean,这样调度器才能找到它。

最简单的方式就是创建一个新的 Java 类,并在其上方添加 @Component 注解。

package com.ruoyi.web.core.task;import com.cmgii.trust.third.dtcp.service.IDtcpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** 定时任务调度类* @author YourName*/
@Component // 1. 声明这是一个Spring组件,让Spring容器来管理它
public class SyncTask {// 2. 注入你真正要执行业务逻辑的Service@Autowiredprivate IDtcpService dtcpService;// 我们将在这里定义具体的定时任务...
}

原理:@Component 注解告诉 Spring:“请为我这个 SyncTask 类创建一个实例,并放到你的容器里备用。” 这样,当调度器需要执行任务时,就能从容器中拿到这个实例并调用它的方法。

第三步:定义具体的定时任务 (@Scheduled)

通过在方法上添加 @Scheduled 注解来完成。在我们的 SyncTask 类中,添加如下方法:

// ... (接上一步的代码) ...
import org.springframework.scheduling.annotation.Scheduled;@Component
public class SyncTask {@Autowiredprivate IDtcpService dtcpService;/*** 每小时的第0分0秒执行一次,同步数据产品。* 这是一个非常常见的定时设置。*/@Scheduled(cron = "0 0 * * * ?") // 3. 定义任务的执行时间表!public void syncDataProducts() {System.out.println("定时任务开始:同步数据产品...");// 调用核心业务逻辑dtcpService.syncDataProducts();System.out.println("定时任务结束:同步数据产品完成。");}/*** 演示:每5分钟执行一次,同步交易订单。* cron = "0 */5 * * * ?"*/@Scheduled(cron = "0 */5 * * * ?")public void syncTradeOrders() {System.out.println("定时任务开始:同步交易订单...");dtcpService.syncTradeOrders();System.out.println("定时任务结束:同步交易订单完成。");}
}
Cron 表达式:时间的魔法咒语

@Scheduled 注解最核心的部分就是 cron 属性,它定义了任务的执行周期。Cron 表达式是一个由6到7个字段组成的字符串,每个字段代表一个时间单位:

[秒] [分] [时] [日] [月] [周]

  • *:代表“每一个”。例如,在“小时”字段使用 * 表示“每小时”。

  • ?:仅用于“日”和“周”字段,表示“不指定”。用于避免冲突。

  • /:表示步长。例如,在“分钟”字段使用 */5 表示“每5分钟”。

常用示例:

  • "0 0 2 * * ?": 每天凌晨2点整执行。

  • "0 15 10 * * ?": 每天上午10点15分执行。

  • "0 0/30 9-17 * * ?": 每天上午9点到下午5点期间,每半小时执行一次。

总结 

通过以上简单的三步,已经成功构建了一个功能完备的定时任务系统:

  1. 开启总开关: 在主启动类上添加 @EnableScheduling

  2. 创建任务类: 创建一个带有 @Component 注解的类。

  3. 定义具体任务: 在类的方法上添加 @Scheduled(cron = "...") 注解,并编写你的业务逻辑。

 

http://www.xdnf.cn/news/1203049.html

相关文章:

  • Spring与SpringBoot:从手动挡到自动挡的Java开发进化论
  • JAVA:Spring Boot 集成 Protobuf 的技术指南
  • Office-PowerPoint-MCP-Server – 基于MCP的开源PPT生成与编辑工具
  • 基于AFLFast的fuzz自动化漏洞挖掘(1)
  • 【Linux系统】Ext2文件系统 | 软硬链接
  • 6种将iPhone照片传输到Windows 10电脑的方法
  • 最小二乘法拟合椭圆
  • 《Linux服务与安全管理》| samba服务器配置匿名模式
  • 嵌入式基础知识复习(7.28)
  • 未授权访问
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
  • window显示驱动开发—Direct3D 11 视频设备驱动程序接口 (DDI)
  • OpenLayers 综合案例-信息窗体-弹窗
  • 对于ui=f(state)的理解(react)
  • python毕业设计案例:基于python django的抖音数据分析与可视化系统,可视化有echarts,算法包括lstm+朴素贝叶斯算法
  • 【Datawhale夏令营】端侧Agent开发实践
  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升
  • [机缘参悟-236]:通过AI人工神经网络理解人的思维特征:惯性思维、路径依赖、适应性、不同场合不同言行、经验、概率、常规与特殊情形(正态分布)、环境适应性
  • 【linux】md5文件相似校验介绍与实战示例
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • 设计模式(十七)行为型:迭代器模式详解
  • react前端样式如何给元素设置高度自适应
  • debian系统分卷是不会影响系统启动速度?
  • 内存分页机制分析在海外VPS系统的测试流程
  • C语言:20250728学习(指针)
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • linux_centos7安装jdk8_采用jdk安装包安装
  • 电脑出现英文字母开不了机怎么办 原因与修复方法
  • 【Java EE】多线程-初阶-线程的状态