苍穹外卖-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);
            }
        }
    }
复制代码
相关推荐
wuqingshun31415910 小时前
RabbitMQ 中无法路由的消息会去到哪里?
java
北冥you鱼11 小时前
Go-Ethereum (Geth) 最佳实践:从部署到生产环境优化
开发语言·后端·golang
thefool11226611 小时前
Java 方法重载
java
程序员爱钓鱼12 小时前
Rust 函数与返回值详解:参数、表达式与返回类型
后端·rust
这不小天嘛17 小时前
JAVA八股——J集合篇
java·开发语言
什巳20 小时前
JAVA练习278- 和为 K 的子数组
java·学习·算法·leetcode
豆瓣鸡20 小时前
RocketMQ学习-Spring Boot消息实践
java·spring boot·rocketmq
wuqingshun31415920 小时前
说一下mysql的覆盖索引
java
罗超驿21 小时前
2.算法效率的核心密码:时间复杂度和空间复杂度详解
java·数据结构·算法
heimeiyingwang21 小时前
【架构实战】缓存一致性:Cache Aside与双写问题的破解
spring·缓存·架构