<!--
今天BOSS约了个面试,HR直接发我一道面试题
SpringBoot中实现订单30分钟自动取消的策略
-->
在电商、外卖、预约服务等场景中,订单超时自动取消是一个常见的业务需求。这一功能不仅提高了系统的自动化程度,还为用户提供了更好的体验。需求如下:
TODO
如果用户在生成订单后一定时间未支付,则系统自动取消订单。
接下来就用 SpringBoot 实现订单超时未支付自动取消的几种方案,并提供相应的代码示例。
基于产品需求,我们首先会思考可行性的解决方案。
@Scheduled
注解来定义一个定时任务,定期检查订单状态并执行相应的取消操作。@Async
注解、配置线程池等。@Entity
public class Order {
@Id
private Long id;
private String userId;
private OrderStatus status; // 订单状态
private Date createTime; // 订单创建时间
// 其他字段和getter、setter方法
}
@Component
public class OrderTimeoutTask {
@Autowired
private OrderService orderService;
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void checkOrderTimeout() {
List<Order> timeoutOrders = orderService.findTimeoutOrders();
timeoutOrders.forEach(order -> orderService.cancelOrder(order.getId()));
}
}
@Service
public class OrderService {
@Autowired
private OrderRepository orderRepository;
public List<Order> findTimeoutOrders() {
// 根据业务规则查找超时订单,例如:当前时间减去订单创建时间大于超时阈值
return orderRepository.findByStatusAndCreateTimeBefore(OrderStatus.PENDING_PAYMENT, new Date(System.currentTimeMillis() - TIMEOUT_THRESHOLD));
}
public void cancelOrder(Long orderId) {
Order order = orderRepository.findById(orderId).orElse(null);
if (order != null && order.getStatus().equals(OrderStatus.PENDING_PAYMENT)) {
order.setStatus(OrderStatus.CANCELED);
orderRepository.save(order);
}
}
}
四、注意事项
通过以上步骤,我们可以在 Spring Boot 中实现订单超时自动取消的策略。在实际应用中,还需要根据具体业务需求进行调整和优化。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。