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代理模式实例分析

    Java代理模式实例分析

    这篇文章主要介绍了Java代理模式,结合实例形式对比分析了java代理模式的使用方法与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • ThreadLocal的set方法原理示例解析

    ThreadLocal的set方法原理示例解析

    这篇文章主要为大家介绍了ThreadLocal的set方法原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Spring 处理 HTTP 请求参数注解的操作方法

    Spring 处理 HTTP 请求参数注解的操作方法

    这篇文章主要介绍了Spring 处理 HTTP 请求参数注解的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友参考下吧
    2024-04-04
  • java设计模式学习之策略模式

    java设计模式学习之策略模式

    这篇文章主要为大家详细介绍了java设计模式学习之策略模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java调用Windows的DOS命令的方法

    Java调用Windows的DOS命令的方法

    这篇文章主要介绍了Java调用Windows的DOS命令的方法,其主要内容思路是实现调用Windows的ipconfig命令,然后将输出的信息通过IO流输出到控制台。有需要的小伙伴参考下
    2015-02-02
  • Java身份证验证方法实例详解

    Java身份证验证方法实例详解

    这篇文章主要介绍了Java身份证验证方法实例详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Java并发工具类Phaser详解

    Java并发工具类Phaser详解

    这篇文章主要介绍了Java并发工具类Phaser详解,Phaser(阶段协同器)是一个Java实现的并发工具类,用于协调多个线程的执行,它提供了一些方便的方法来管理多个阶段的执行,可以让程序员灵活地控制线程的执行顺序和阶段性的执行,需要的朋友可以参考下
    2023-11-11
  • 使用IDEA开发配置Java Web的初始化过程

    使用IDEA开发配置Java Web的初始化过程

    该教程使用idea开发工具初始化javaweb项目,该运行在tomcat服务器上通过配置项目环境变量保证tomcat正常启动,具体操作配置教程参考下本文
    2021-06-06
  • java String的深入理解

    java String的深入理解

    这篇文章主要介绍了java String的深入理解的相关资料,希望通过本文大家能理解String的用法,需要的朋友可以参考下
    2017-09-09
  • Java 高并发七:并发设计模型详解

    Java 高并发七:并发设计模型详解

    本文主要介绍Java高并发 并发设计模型的知识,这里主要讲解 1. 什么是设计模式 2. 单例模式 3. 不变模式 4. Future模式 5. 生产者消费者,有需要的小伙伴可以参考下
    2016-09-09

最新评论