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 篇文章
浏览 181.2K
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
热爱技术的小郑的其他文章
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
在vue页面引入Echarts,图表的数据来自数据库, SpringBoot+Vue实现图表的制作
ECharts 是一个优秀的开源图表库,具有以下好处:\x0d\x0a 功能丰富:ECharts 提供了丰富的图表类型和交互功能,可以满足各种数据可视化需求,包括折线图、柱状图、饼图、雷达图、散点图等等。具体实现如下。。。
揭秘 为什么大部分程序员喜欢熬夜敲代码
为什么程序员喜欢熬夜敲代码?1、夜深人静 晚上是大多数人活动较少的时间段,这种安静的环境有助于程序员集中注意力,减少干扰,更好地专注于代码编写。
项目重构:挑战重重还是推倒重来?揭秘重构与新建项目的真相!
在软件开发的世界里,项目重构一直是一个备受争议的话题。许多开发者在面临重构任务时,总会感叹其复杂性和不确定性,甚至有人觉得,与其投入大量精力去重构一个项目,不如直接新建一个项目来得简单直接
Java系列知识之~~增强for循环和一般for循环的对比使用
增强for循环(Enhanced for Loop)和一般循环(Regular Loop)是两种在编程中常用的循环结构,它们各有特点和适用场景。。。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线