苍穹外卖-Day10(Spring task)

1.Spring task介绍

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

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

2.cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定时任务触发的时间

构成规则:;分成6个或7个域,由空格分隔开,每个域代表一个含义

含义分别为:秒、分钟、小时、日、月、周、年(可选)

3.订单状态定时处理

java 复制代码
@Scheduled(cron = "0 * * * * ?")//每分钟执行一次
    public void processTimeoutOrder() {
        log.info("定时处理超时订单:{}", LocalDateTime.now());
        List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, LocalDateTime.now().plusMinutes(-15));
        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());
        List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, LocalDateTime.now().plusMinutes(-60));
        if(ordersList!=null&&ordersList.size()>0){
            for (Orders orders : ordersList) {
                orders.setStatus(Orders.COMPLETED);

                orderMapper.update(orders);
            }
        }
    }
复制代码
相关推荐
stark张宇25 分钟前
Go语言runtime全景图:从编译到GC,带你彻底吃透Go的底层血脉
后端·go
IT_陈寒29 分钟前
Redis的DEL命令居然没删干净数据?这个坑我爬了半天
前端·人工智能·后端
程序员小八77731 分钟前
Java 快速转 Go
java·python·golang
职场的momo1 小时前
11个后端与AI岗位同时开放:Java、网关、推理优化怎么匹配
java·开发语言·人工智能
罗超驿1 小时前
SpringMVC 请求参数接收详解|单个参数、多参数、对象参数、@RequestParam参数重命名
java·后端·postman·javaee
__zRainy__2 小时前
Node系列 · ORM:Sequelize 简介
数据库·后端·node.js
AskHarries2 小时前
OpenClaw 如何查看历史对话和响应时间?
后端
n8n2 小时前
Spring Boot 3.2+ 新特性、Spring AI 核心架构与 API Key 安全管理技术文档
后端
古法安卓2 小时前
Android-epoll原理详解
android·java·android studio
fireworks992 小时前
接口鉴权(401与403)
java·后端