【java】如何实现订单自创建起十分钟如果状态还是支付中,将状态设置成支付失败

有一个订单表,如何实现订单自创建起十分钟如果状态还是支付中,将状态设置成支付失败?
定时器能设定开始时间为该订单为创建时间吗

如果是线上运行的分布式项目,建议用中间件实现
1.延迟消息队列,rabbitmq或者rocketmq都可以
2.redis实现延迟队列
具体:
计算好检测状态时间
用zset实现,score是延迟执行时间,key可以为一个json字符串
程序中启动定时任务去轮询,获取score<=当前时间的(注意这里得是加锁)

具体选择哪个得看实际项目,如果你项目中已经有集成了消息队列,并且延迟的间隔不多,比如说(10s、2s)可以考虑否则话我建议还是redis,简单容易集成

如果是单体项目的话,实现方式也很多
1.java延迟执行线程池
2.定时器
等等

你可以这样。
1,写个接口方法
查询当前时间前10分所有的订单。
如果状态仍在支付中,则修改成支付失败。
2,写个定时器执行该方法,1分钟执行一次。

订单创建时设置超时。使用延迟队列,死信队列都行,如果对10分钟要求不是很严格,定时任务扫描,redis key过期都可以实现