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

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

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

扫码阅读
手机扫码阅读

文章主旨:本文提供了一种基于SpringBoot定时任务实现“未支付订单自动取消”功能的标准技术方案,适用于需要自动释放资源的业务场景。

关键要点:

  1. 核心业务逻辑是通过定时任务扫描数据库,根据订单的创建时间和支付状态,判定订单是否超时,并自动更新状态。
  2. 数据库设计的关键字段包括订单状态(status)和创建时间(create_time),这是判断超时的依据。
  3. 技术实现上,需要在SpringBoot启动类添加@EnableScheduling注解,并编写一个带有@Scheduled注解的定时任务类。
  4. 定时任务的执行频率设置为每30分钟一次,实际执行时查询超过30分钟且未支付的订单并取消。
  5. 业务层方法使用@Transactional事务注解,确保取消操作的数据一致性。

内容结构:

  • 前言:阐述了“未支付订单自动取消”这一需求的常见业务场景(如场地预约、电商订单等),并指出如果用户长时间未支付,会导致资源占用、库存无法回收、数据异常等问题。因此,定时任务扫描是解决该问题的经典方案。
  • 一、整体业务流程:详细描述了自动取消的完整流程,即用户提交预约订单→订单状态置为“待支付”→记录创建时间→SpringBoot定时任务每30分钟扫描→查询超过30分钟未支付的订单→修改订单状态为“已取消”→释放场地资源→记录日志。
  • 二、数据库设计:展示了一张示例的court_booking(场地预约)表结构,关键字段包括status(订单状态,如0待支付、1已支付、2已取消)和create_time(创建时间),用以支持超时判定。
  • 三、开启SpringBoot定时任务:在SpringBoot启动类上添加@EnableScheduling注解,以开启定时任务功能。
  • 四、编写定时任务类:通过@Component@Scheduled(fixedDelay = 30 * 60 * 1000)注解创建一个每隔30分钟执行一次的定时任务,调用业务层方法cancelTimeoutUnpaidOrders()
  • 五、对应的业务层:展示了cancelTimeoutUnpaidOrders()方法的实现逻辑,包括计算30分钟前的时间点、查询未支付且创建时间早于该时间点的订单并执行取消操作。示例:查询未支付且创建时间早于30分钟前的订单,修改状态为“已取消”。

文章总结:本文以场地预约系统为例,提供了一套清晰、可复用的SpringBoot定时任务实现方案,适合作为后端开发中处理超时订单的参考模板。

热爱技术的小郑

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

107 篇文章
浏览 130.1K

还在用多套工具管项目?

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

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