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

Spring Task

Spring Task 是 Spring 框架提供的轻量级任务调度工具,支持定时任务和异步任务。以下是其核心用法:


一、基础配置

1. 启用定时任务

在配置类中添加 @EnableScheduling 注解,启用定时任务功能:

@Configuration
@EnableScheduling
public class AppConfig {}

二、定时任务

1. 创建任务类

使用 @Component 标记类,并在方法上添加 @Scheduled 注解:

@Component
public class MyTask {// 每5秒执行一次(固定频率)@Scheduled(fixedRate = 5000)public void task1() {System.out.println("Fixed Rate Task: " + new Date());}// 上一次任务结束后,延迟3秒执行(固定延迟)@Scheduled(fixedDelay = 3000)public void task2() {System.out.println("Fixed Delay Task: " + new Date());}// 使用Cron表达式(每天12点执行)@Scheduled(cron = "0 0 12 * * ?")public void task3() {System.out.println("Cron Task: " + new Date());}
}
2. 参数说明
  • fixedRate:固定频率,单位毫秒。无论上一次任务是否完成,按固定间隔执行。
  • fixedDelay:固定延迟,单位毫秒。上一次任务完成后,间隔指定时间再执行。
  • cron:Cron表达式,支持复杂调度(如 0 0/30 * * * ? 表示每30分钟执行)。

三、Cron表达式语法

格式:秒 分 时 日 月 周 年(可选)

  • 示例:
    • 0 0 12 * * ?:每天中午12点执行。
    • 0 0/5 9-17 * * MON-FRI:工作日上午9点到下午5点,每5分钟执行。

四、异步任务

结合 @Async 实现异步执行,需配合线程池:

  1. 启用异步支持:
    @Configuration
    @EnableAsync
    public class AsyncConfig {}
    
  2. 定义异步任务:
    @Component
    public class AsyncTask {@Async@Scheduled(fixedRate = 5000)public void asyncTask() {// 异步执行的逻辑}
    }
    

五、XML配置方式(旧版)

applicationContext.xml 中配置:

<!-- 启用调度 -->
<task:annotation-driven /><!-- 定义任务 -->
<task:scheduled-tasks scheduler="myScheduler"><task:scheduled ref="myTask" method="task1" cron="0 0 12 * * ?" />
</task:scheduled-tasks><task:scheduler id="myScheduler" pool-size="5" />

六、线程池配置

默认单线程执行任务,可通过实现 SchedulingConfigurer 自定义线程池:

@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));}
}

注意事项

  1. 线程安全:确保任务方法是线程安全的。
  2. 错误处理:任务内应捕获异常,避免任务终止。
  3. 动态任务:需通过 ScheduledTaskRegistrar 动态注册任务。

通过以上步骤,即可灵活使用 Spring Task 实现定时和异步任务调度。

相关文章:

  • 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(二)(完整实现流程)
  • 服务器硬盘分类
  • 服务器磁盘按阵列划分为哪几类
  • 【Vue】将响应式对象转为非响应式对象
  • (37)服务器增加ipv6配置方法
  • 浪潮Inspur服务器产品线概述
  • van-picker实现日期时间选择器
  • fatal error: uuid/uuid.h: No such file or directory 编译问题修复。
  • linux杀死进程自身
  • 准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序
  • linux二进制安装mysql:
  • STM32之模数转换器(ADC)
  • 第三次中医知识问答模型微调
  • FFmpeg解码器配置指南:为什么--enable-decoders不能单独使用?
  • 【CSS】九宫格布局
  • Windos11家庭版安装本地安全策略
  • 线程池线程数配置
  • LeRobot的机器人控制系统(上)
  • Python 响应报文提取方式
  • 完整改进RIME算法,基于修正多项式微分学习算子Rime-ice增长优化器,完整MATLAB代码获取
  • 做网站优化价格/长沙网站推广排名
  • 优秀网站设计分析/公司软文
  • 做网站优化选阿里巴巴还是百度/seo提高网站排名
  • 刚刚做的网站怎么排名/友情链接大全
  • 公司宣传推广方案/南宁seo服务公司
  • 自己做个网站怎么做/精准营销名词解释