当前位置: 代码网 > it编程>编程语言>Java > Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

2025年01月11日 Java 我要评论
threadpooltaskscheduler线程池实现15分钟不操作自动取消订单概要使用threadpooltaskscheduler的schedule方法实现当前操作15分钟后执行定时任务1,创建

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线程池内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com