首页 > 其他分享 >Spring Task定时任务

Spring Task定时任务

时间:2024-07-13 22:08:24浏览次数:17  
标签:Task ordersList Spring cron LocalDateTime 定时 orders

介绍

Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。

作用:定时自动执行某段Java代码

应用场景:

  • 信用卡每月还款提醒
  • 银行贷款每月还款提醒
  • 火车票售票系统处理未支付订单
  • 入职纪念日为用户发送通知等

只要是需要定时处理的场景都可以使用Spring Task

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间
构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义
每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)

cron表达式在线生成器:https://cron.qqe2.com/

使用

Spring Task使用步骤:

  1. 导入maven坐标 spring-context(已存在)在spring-boot-starter里
  2. 启动类添加注解 @EnableScheduling 开启任务调度
  3. 自定义定时任务类
/**
 * 自定义定时任务类
 */
@Component
@Slf4j
public class MyTask {

    /**
     * 定时任务 每隔5秒触发一次
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void executeTask(){
        log.info("定时任务开始执行:{}", new Date());
    }

}

/**
 * 定时任务类,定时处理订单状态
 */
@Component
@Slf4j
@RequiredArgsConstructor
public class OrderTask {

//    @Autowired
    private final OrderMapper orderMapper;

    /**
     * 处理超时订单的方法
     */
    @Scheduled(cron = "0 * * * * ? ") //每分钟触发一次
    public void processTimeoutOrder(){
        log.info("定时处理超时订单:{}", LocalDateTime.now());

        LocalDateTime time = LocalDateTime.now().minusMinutes(15);

        // select * from orders where status = ? and order_time < (当前时间 - 15分钟)
        List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);

        if(ordersList != null && ordersList.size() > 0){
            for (Orders orders : ordersList) {
                orders.setStatus(Orders.CANCELLED);
                orders.setCancelReason("订单超时,自动取消");
                orders.setCancelTime(LocalDateTime.now());
                orderMapper.update(orders);
            }
        }
    }

    /**
     * 处理一直处于派送中状态的订单
     */
    @Scheduled(cron = "0 0 1 * * ?") //每天凌晨1点触发一次
    public void processDeliveryOrder(){
        log.info("定时处理处于派送中的订单:{}",LocalDateTime.now());

        LocalDateTime time = LocalDateTime.now().minusMinutes(60);

        List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, time);

        if(ordersList != null && ordersList.size() > 0){
            for (Orders orders : ordersList) {
                orders.setStatus(Orders.COMPLETED);
                orderMapper.update(orders);
            }
        }
    }
}

标签:Task,ordersList,Spring,cron,LocalDateTime,定时,orders
From: https://www.cnblogs.com/ashuai123/p/18300824

相关文章

  • Spring框架,IOC学习整理
    思考平时我们创建对象的类的时候,经常会在类里面引用其他的类,形成类与类的依赖,当其中一个类功能需要进行修改的时候,就需要修改那个类的代码,由于这个类的依赖关系很复杂也就是所说的耦合度很高,所以很可能导致修改一个类就需要修改其他依赖这个类的代码,极大的影响开发的效率,......
  • 【带小白做项目】SpringBoot:初识SpringBoot,搭建我们的第一个SpringBoot项目框架
    一事前准备工作    在我们使用SpringBoot框架搭建项目前,要首先完成JDK和Maven的安装及配置。        JDK是Java编程的基础,已经开始学习SpringBoot的同学应该已经对JDK的安装配置方法烂熟于心了,这里不再赘述,大家可以参考jdk8的安装教程保姆级,超详细(自带下载......
  • 一张图片彻底搞定springboot自动装配原理
    自动装配原理pom.xml父工程spring-boot-starter-parent<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.1</version><relativePath/>......
  • 课程设计——基于SpringBoot的医院药品管理系统
    库存管理登记入库的药品。登记出库的药品。每日检查库存下限,报警。每日检查过期的药品,报警并做退回销毁处理。对有问题的药品的退回供应商。记录退回的药品的名称、数量、金额和退货原因等。2600套成品项目,均包含万字文档,图片为目前拥有的部分项目,其他包括python,java,Andr......
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源
          博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经......
  • springboot+vue+mybatis文化遗产管理系统+PPT+论文+讲解+售后
    信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多......
  • 基于SpringBoot的校园志愿者管理系统
    你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架工具:MyEclipse、Tomcat系统展示首页个人中心志愿者管理活动信息管理摘要随着信息化时代的到来,管理系统趋向于智能化、系统化。校园志愿者管理系统的......
  • 基于SpringBoot的校园疫情防控系统
    你好,我是专注于计算机科学与技术的研究者。如果你对我的工作感兴趣或有任何问题,欢迎随时联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架,B/S架构工具:Eclipse,Maven系统展示首页疫情动态管理防疫教育管理健康打卡管理摘要本文介绍了一个基于SpringBoot框......
  • 【java深入学习第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理与应用
    前言在使用MyBatis进行持久层开发时,通常会与Spring框架集成,以便更好地管理事务和依赖注入。在MyBatis-Spring集成中,SqlSession是一个非常重要的概念。本文将详细介绍SqlSessionTemplate和SqlSessionDaoSupport,并提供相关的代码示例。一、SqlSessionTemplateSqlSessio......
  • 使用Spring Boot集成Sentinel
    使用SpringBoot集成Sentinel大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、什么是Sentinel?Sentinel是阿里巴巴开源的一款流量控制、熔断降级的框架,能够帮助我们解决分布式系统中的流量管理问题。在微服务架构中,服务间的调用复杂度高,Sentinel可以......