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线程池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解SpringBoot中的index首页的访问、自定义Favicon图标
这篇文章主要介绍了SpringBoot中的index首页的访问、自定义Favicon图标,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-08-08
JFinal使用ajaxfileupload实现图片上传及预览
这篇文章主要为大家详细介绍了JFinal使用ajaxfileupload实现图片上传及预览,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-09-09
Maven的配置文件pom.xml详解(含常用plugin)
pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM)的缩写,本文我们将全面解析pom.xml,了解其结构和属性,以及如何使用它来管理项目,感兴趣的朋友跟随小编一起看看吧2024-08-08
Java并发(Runnable+Thread)实现硬盘文件搜索功能
这篇文章主要介绍了Java并发(Runnable+Thread)实现硬盘文件搜索,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01


最新评论