外卖开发(八)—— SpringTask(定时任务) 和 WebSocket网络协议

一、利用SpringTask完成定时任务

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

定位: 定时任务框架
作用: 定时自动执行某段Java代码

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

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

1、cron表达式

@Scheduled(cron = "0 0 1 * * ? ") 注解

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

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

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cron表达式在线生成: https://cron.qqe2.com/

在这里插入图片描述

2、springtask实现

使用springtask解决外卖订单已经派送成功,用户迟迟不点击已送达,需要我们在一个特点的时间点(凌晨一点)检查一天前的所有 “正在派送” 的订单,并修改状态为已完成。

在这里插入图片描述

需求分析:
用户收货后管理端未点击完成按钮,订单一直处于“派送中”状态
通过定时任务每天凌晨1点检查一次是否存在“派送中”的订单,如果存在则修改订单状态为“已完成”

1、自定义定时任务类

OrderTask.java

@Component
@Slf4j
public class OrderTask {
   
   


    @Autowired
    private OrderMapper orderMapper;

    /**
     * 每天夜里一点检查是否存在已派送未完成的订单
     */
    @Scheduled(cron = "0 0 1 * * ? ")
    public void processDeliveryOrder(){
   
   
        log.info("系统处理未支付订单:{}",LocalDateTime.now());
        LocalDateTime localDateTime = LocalDateTime.now().plusHours(-1); //检查时间小于0:00的订单
        List<Orders> orders = orderMapper.checkDeliveryUnsuccess(Orders.DELIVERY_IN_PROGRESS,localDateTime);
        if(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值