Spring Task实现定时任务的示例

 更新时间:2026年04月08日 08:44:13   作者:Zzxy  
定时任务的是按照指定的时间或时间间隔,自动执行的任务, 在应用程序中通常用于自动化处理一些定期或周期性的操作,特别是与时间相关的任务,本文就来详细的介绍一下Spring Task实现定时任务的示例,感兴趣的可以了解一下

1、Spring 定时任务

定时任务Scheduled Task)指的是按照指定的时间或时间间隔,自动执行的任务。

在应用程序中通常用于自动化处理一些定期或周期性的操作,特别是与时间相关的任务。

应用场景

  • 数据统计与报表生成
  • 缓存清理与刷新:自动清理过期数据
  • 数据同步与备份
  • 系统监控与告警
  • 消息发送与通知:自动发送邮件

1.1 执行方式

  • 固定间隔执行

    • 使用 fixedRate 或 fixedDelay
    • fixedRate: 每隔固定时间执行一次(开始时间到开始时间)
    • fixedDelay: 上一次任务完成后延迟固定时间再执行
  • Cron 表达式执行

    • 使用 cron 表达式,可以精确控制执行时间(每天、每周、每月等)
    • 表达式格式:秒 分 时 日 月 星期
  • 触发器任务

    • Spring 还支持基于触发器(Trigger)的复杂任务调度,可以动态控制下次执行时间

2、定时任务 Spring Task 实现

2.1 开启定时任务

引入 Spring 的定时任务依赖:Spring Boot 中启用定时任务添加 @EnableScheduling 注解

@SpringBootApplication
@MapperScan("com.hospital.mapper")
@EnableCaching
@EnableScheduling  // 开启定时任务
public class SpringBootSystemApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootSystemApplication.class, args);
    }
}

2.2 创建定时任务类

使用 @Scheduled 注解来定义执行周期和任务,创建AppointmentTask,实现自动取消过期预约

package com.example.task;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.example.entity.Appointment;
import com.example.mapper.AppointmentMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
@Slf4j
@Component
public class AppointmentTask {
    @Autowired
    private AppointmentMapper appointmentMapper;
    /**
     * 每天凌晨1点执行,将已过期未就诊的预约状态改为"已过期"
     * cron表达式:秒 分 时 日 月 星期
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public void cancelExpiredAppointments() {
        log.info("开始执行过期预约取消任务");
        // 获取当前日期之前的所有预约(预约日期小于今天)
        Date today = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
        LambdaUpdateWrapper<Appointment> wrapper = new LambdaUpdateWrapper<>();
        wrapper.lt(Appointment::getAppointmentDate, today)
               .eq(Appointment::getStatus, "已预约")
               .set(Appointment::getStatus, "已过期");
        int rows = appointmentMapper.update(null, wrapper);
        log.info("过期预约取消任务完成,共更新{}条记录", rows);
    }
    /**
     * 测试用:每30秒执行一次(取消后注释)
     */
    // @Scheduled(fixedDelay = 30000)
    // public void testTask() {
    //     log.info("定时任务测试");
    // }
}

到此这篇关于Spring Task实现定时任务的示例的文章就介绍到这了,更多相关Spring Task 定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中关于泛型、包装类及ArrayList的详细教程

    Java中关于泛型、包装类及ArrayList的详细教程

    泛型可以在类或方法中预支地使用未知的类型。这篇文章主要介绍了Java中关于泛型、包装类及ArrayList的详细教程,需要的朋友可以参考下
    2021-12-12
  • java byte与base64的互转的实现示例

    java byte与base64的互转的实现示例

    在项目开发中经常用到,比如前端上送文件流(byte[])到后台并转成文件,本文主要介绍了java byte与base64的互转的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Spring Boot通过Redis实现防止重复提交

    Spring Boot通过Redis实现防止重复提交

    表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,本文主要介绍了Spring Boot通过Redis实现防止重复提交,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java中的构造方法和方法重载完整代码

    Java中的构造方法和方法重载完整代码

    在Java编程中,构造方法用于初始化对象,而方法重载允许同一个类中存在多个同名方法但参数不同,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 在SpringBoot中无缝整合Dubbo的实现过程

    在SpringBoot中无缝整合Dubbo的实现过程

    微服务架构已经成为现代应用开发的热门趋势,而Dubbo作为一款强大的分布式服务框架,与Spring Boot的结合是构建高性能微服务应用的理想选择,本文将详细介绍如何在SpringBoot中无缝整合Dubbo,需要的朋友可以参考下
    2024-01-01
  • Springboot2.6.x的启动流程与自动配置详解

    Springboot2.6.x的启动流程与自动配置详解

    这篇文章主要给大家介绍了关于Springboot2.6.x的启动流程与自动配置的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • maven实现jar包导入+导出方式

    maven实现jar包导入+导出方式

    这篇文章主要介绍了maven实现jar包导入+导出方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java面试题冲刺第十九天--数据库(4)

    Java面试题冲刺第十九天--数据库(4)

    这篇文章主要为大家分享了最有价值的三道关于数据库的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Spring Boot @Autowired @Resource属性赋值时机探究

    Spring Boot @Autowired @Resource属性赋值时机探究

    这篇文章主要为大家介绍了Spring Boot @Autowired @Resource属性赋值时机,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Springboot多种情况yml配置代码实例

    Springboot多种情况yml配置代码实例

    这篇文章主要介绍了Springboot多种情况yml配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论