Spring Boot 定时任务扫描超时订单(详细实现 + 完整案例)

订单 支付 30 预约 超时
发布于 2026-06-12
66

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
文章主旨: 本文介绍通过SpringBoot定时任务实现未支付订单自动取消的完整方案,以释放被占用的资源。
关键要点:
  • 定时任务扫描是处理超时订单的经典后端方案,避免资源长期占用。
  • 业务流程:用户提交待支付订单 → 每30分钟扫描 → 查询创建超过30分钟且未支付的订单 → 修改状态为已取消并释放资源。
  • 数据库表需包含订单状态(status)和创建时间(create_time),以判断超时。
  • 实现方式:启动类添加@EnableScheduling,定时任务类使用@Scheduled(fixedDelay = 30 * 60 * 1000)注解,每30分钟执行一次。
  • 业务层方法:计算当前时间前30分钟的时间点,查询未支付且创建时间早于该时间点的订单,批量取消并释放资源。
内容结构:
  1. 前言:指出“未支付订单自动取消”的常见业务需求,如场地预约、电商订单等,若不处理会导致资源占用、数据异常。
  2. 整体业务流程:用户提交订单 → 订单状态为待支付 → 数据库记录创建时间 → 定时任务每30分钟扫描 → 查询超过30分钟未支付订单 → 修改订单状态为已取消 → 释放场地资源 → 记录日志。
  3. 数据库设计:给出court_booking表示例,包含id、user_id、court_id、booking_date、start_time、end_time、status(0待支付/1已支付/2已取消)、create_time、update_time。
  4. 开启 SpringBoot 定时任务:在启动类添加@EnableScheduling注解。
  5. 编写定时任务类:使用@Component和@Scheduled注解,定义每30分钟执行一次的checkUnpaidOrders()方法,调用业务层。
  6. 对应的业务层:通过@Transactional注解实现事务控制,计算30分钟前的时间点,查询并批量更新订单状态为已取消。
文章总结: 本文提供了一个简洁、可复用的技术方案,适用于各类需要自动处理超时订单的后端系统,逻辑清晰且易于实现。

热爱技术的小郑

CSDN 2022博客之星后端领域TOP 1;专家博主官方认证;全网10W+粉丝;主要用公众号分享纯干货知识,前沿技术、实战项目开发经验、优秀项目源码案例等。我坚信总有一篇文章对你有用

107 篇文章
浏览 147.6K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线