Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单
更新时间:2025年01月10日 12:17:35 作者:rain_is_my_name
这篇文章主要介绍了Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单,本文给大家介绍的非常详细,需要的朋友可以参考下
ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单
概要
使用ThreadPoolTaskScheduler的schedule方法实现当前操作15分钟后执行定时任务
1,创建订单后触发
1.1 Impl层
private final OrderSchedulerService schedulerService; @Override @Transactional(rollbackFor = Exception.class) public R saveHotelOrder(HotelOrderPO po) { HotelOrder order = new HotelOrder(); boolean saveOrUpdate = saveOrUpdate(order); // 补充自己的开发逻辑 if(条件满足){ schedulerService.createScheduler(order.getId()); } return R.data(order.getId()); }
1.2 OrderSchedulerService(核心类)
@Slf4j @Service @AllArgsConstructor public class OrderSchedulerService { private final HotelOrderMapper hotelOrderMapper; private final ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); private final ConcurrentHashMap<Long, ScheduledFuture<?>> orderTasks = new ConcurrentHashMap<>(); // 模拟用户新增订单 public void createScheduler(Long orderId) { taskScheduler.initialize(); // 15分钟后执行 Instant plus = Instant.now().plus(Duration.ofMinutes(15)); ScheduledFuture<?> future = taskScheduler.schedule(() -> { if (isOrderActive(orderId)) { // 取消订单 HotelOrder order = hotelOrderMapper.selectById(orderId); order.setStatus(CommonConstant.INT_5); hotelOrderMapper.updateById(order); log.info("15分钟未操作,自动取消订单:{}", order.getSerialNumber()); } }, plus); orderTasks.put(orderId, future); } // 订单取消时,取消订单的15分钟定时任务 public void cancelScheduler(Long orderId) { ScheduledFuture<?> future = orderTasks.get(orderId); if (future != null && !future.isDone()) { future.cancel(false); orderTasks.remove(orderId); log.info("15分钟有支付操作,取消订单定时任务:{}", orderId); } } // 检查订单是否仍在任务列表中(模拟订单未删除) private boolean isOrderActive(Long orderId) { return orderTasks.containsKey(orderId); } }
2,订单手动取消则取消该订单对应的定时任务
1.1 Impl层
@Override public R cancelByIdForMini(Long id, String reason) { // 写自己的取消业务 // 订单取消时,取消订单的15分钟定时任务 log.info(" 订单取消时,取消订单的15分钟定时任务:{}", id.toString()); schedulerService.cancelScheduler(id); return R.status(true); }
总结
使用ThreadPoolTaskScheduler的schedule方法实现当前操作15分钟后执行定时任务~创作不易,尊重知识,转载请附带本文链接
到此这篇关于Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单的文章就介绍到这了,更多相关Springboot ThreadPoolTaskScheduler线程池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java多线程中的volatile和synchronized用法分析
这篇文章主要介绍了java多线程中的volatile和synchronized用法分析,以实例的形式分析了在多线程中volatile和synchronized的用法区别与使用原理,具有一定的参考借鉴价值,需要的朋友可以参考下2014-12-12SpringBoot 在IDEA中实现热部署步骤详解(实用版)
这篇文章主要介绍了SpringBoot 在IDEA中实现热部署步骤详解(实用版),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-12-12Java中的String、StringBuilder、StringBuffer三者的区别详解
这篇文章主要介绍了Java中的String、StringBuilder、StringBuffer三者的区别详解,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,需要的朋友可以参考下2023-12-12
最新评论