Spring Boot 定时任务扫描超时订单(详细实现 + 完整案例)
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
热爱技术的小郑
扫码关注公众号
扫码阅读
手机扫码阅读
文章主旨: 本文介绍通过SpringBoot定时任务实现未支付订单自动取消的完整方案,以释放被占用的资源。
关键要点:
- 定时任务扫描是处理超时订单的经典后端方案,避免资源长期占用。
- 业务流程:用户提交待支付订单 → 每30分钟扫描 → 查询创建超过30分钟且未支付的订单 → 修改状态为已取消并释放资源。
- 数据库表需包含订单状态(status)和创建时间(create_time),以判断超时。
- 实现方式:启动类添加@EnableScheduling,定时任务类使用@Scheduled(fixedDelay = 30 * 60 * 1000)注解,每30分钟执行一次。
- 业务层方法:计算当前时间前30分钟的时间点,查询未支付且创建时间早于该时间点的订单,批量取消并释放资源。
内容结构:
- 前言:指出“未支付订单自动取消”的常见业务需求,如场地预约、电商订单等,若不处理会导致资源占用、数据异常。
- 整体业务流程:用户提交订单 → 订单状态为待支付 → 数据库记录创建时间 → 定时任务每30分钟扫描 → 查询超过30分钟未支付订单 → 修改订单状态为已取消 → 释放场地资源 → 记录日志。
- 数据库设计:给出court_booking表示例,包含id、user_id、court_id、booking_date、start_time、end_time、status(0待支付/1已支付/2已取消)、create_time、update_time。
- 开启 SpringBoot 定时任务:在启动类添加@EnableScheduling注解。
- 编写定时任务类:使用@Component和@Scheduled注解,定义每30分钟执行一次的checkUnpaidOrders()方法,调用业务层。
- 对应的业务层:通过@Transactional注解实现事务控制,计算30分钟前的时间点,查询并批量更新订单状态为已取消。
文章总结: 本文提供了一个简洁、可复用的技术方案,适用于各类需要自动处理超时订单的后端系统,逻辑清晰且易于实现。
热爱技术的小郑
热爱技术的小郑
扫码关注公众号
CSDN 2022博客之星后端领域TOP 1;专家博主官方认证;全网10W+粉丝;主要用公众号分享纯干货知识,前沿技术、实战项目开发经验、优秀项目源码案例等。我坚信总有一篇文章对你有用
107 篇文章
浏览 147.6K
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
热爱技术的小郑的其他文章
一文讲明SpringMVC 【爆肝整理一万五千字】
一文讲明SpringMVC 【爆肝整理一万五千字】
毕设答辩问题讲解说明:基于SpringBoot+Vue的旅游平台管理系统
请简要说明系统使用的技术栈以及作用?请简要说明数据库的设计过程?请简要说明系统实现了哪些功能?简要说明一下token的作用及其简单实现?
一次接口编码格式异常引发的乱码问题排查与复盘
每一个 Bug 背后,都藏着一次成长机会。今天分享一次真实的接口编码格式异常导致的乱码问题排查过程,从现象分析到最终复盘,希望对你也有启发。
如何轻松屏蔽脏话?SpringBoot+Vue实现敏感数据过滤。给你的项目添加一丝亮点
如何轻松屏蔽脏话?SpringBoot+Vue实现敏感数据过滤。评论敏感词过滤也可以算成毕业设计系统的一个小小的创新点,而且用到的场景也比较多。
【一】在线刷题数据库详细设计 ~2025年最热的计算机毕业设计方向推荐
每年都会有很多学生咨询如何开发系统呀?如何设计数据库呀?如何在短时间内完成系统的开发等等。系统开发和设计没有你想象的那么难,只要将数据库表设计出来,系统基本上也就出来了。我会陆续分享一些常见系统的数据表设计、也是毕业设计中常见的。。。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线