当前位置: 首页 > 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.dtcms.com/a/301889.html

相关文章:

  • 【Spring】Spring Boot启动过程源码解析
  • 鸿蒙打包签名
  • HarmonyOS 6 云开发-用户头像上传云存储
  • 前端工程化常见问题总结
  • Windows|CUDA和cuDNN下载和安装,默认安装在C盘和不安装在C盘的两种方法
  • AI技术革命:产业重塑与未来工作范式转型。
  • 深入解析MIPI C-PHY (四)C-PHY物理层对应的上层协议的深度解析
  • 齐护Ebook科技与艺术Steam教育套件 可图形化micropython Arduino编程ESP32纸电路手工
  • 湖南(源点咨询)市场调研 如何在行业研究中快速有效介入 起头篇
  • Triton编译
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.5 计算预订订单数量和总金额 (Calculating booked orders)
  • Rouge:面向摘要自动评估的召回导向型指标——原理、演进与应用全景
  • 分表分库与分区表
  • Android启动时间优化大全
  • 蛋白质反向折叠模型-ProteinMPNN安装教程
  • 学习日志20 python
  • 【unitrix】 6.18 二进制小数特质(t_decimal.rs)
  • EPOLLET 边缘触发模式深度解析
  • 抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨
  • vue3的一些浅显用法
  • Day06–哈希表–242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
  • 浙大公开课—基于深度学习的特征匹配与姿态估计
  • (补题)拼图游戏
  • EPOLLIN事件的详细解析
  • 【时时三省】(C语言基础)指针数组和多重指针
  • MySQL 8.4 Windows 版安装记录与步骤参考
  • 【C语言网络编程基础】DNS 协议与请求详解
  • Context Engineering Notes
  • 持续优化Cypress自动化测试
  • FunctionCall 如何使用以及如何训练