Java 使用 Redis 实现 30 分钟未支付订单自动取消
以下是 Java 代码实现 30 分钟未支付订单自动取消的逻辑:
- 引入 Redis 客户端依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.1</version>
</dependency>
- 创建 Redis 连接池及 Redis 工具类
public class RedisUtil {
private static JedisPool jedisPool;
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(10);
jedisPool = new JedisPool(config, 'localhost', 6379, 10000);
}
public static Jedis getJedis() {
return jedisPool.getResource();
}
}
- 在生成订单时,将订单信息存入 Redis,并设置过期时间为 30 分钟
public void createOrder(Order order) {
// 生成订单
...
// 存入 Redis,设置过期时间为 30 分钟
Jedis jedis = RedisUtil.getJedis();
jedis.setex(order.getId(), 1800, order.toString());
jedis.close();
}
- 编写定时任务,在 Redis 中查找所有 30 分钟未支付的订单,并取消订单
public class CancelOrderTask {
public void cancelOrder() {
Jedis jedis = RedisUtil.getJedis();
Set<String> orders = jedis.keys('*');
for (String orderId : orders) {
String orderStr = jedis.get(orderId);
Order order = new Order(orderStr);
if (order.getStatus() == OrderStatus.UNPAID && System.currentTimeMillis() - order.getCreateTime() > 1800000) {
// 取消订单
order.setStatus(OrderStatus.CANCELED);
jedis.set(orderId, order.toString());
}
}
jedis.close();
}
}
- 使用定时任务框架(如 Quartz)定时执行 cancelOrder 方法
public class QuartzScheduler {
public void start() throws SchedulerException {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
JobDetail job = JobBuilder.newJob(CancelOrderJob.class).build();
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule('0 0/30 * * * ?')).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
}
- 编写定时任务执行的逻辑
public class CancelOrderJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
CancelOrderTask cancelOrderTask = new CancelOrderTask();
cancelOrderTask.cancelOrder();
}
}
以上就是 Java 使用 Redis 实现 30 分钟未支付订单自动取消的完整代码逻辑。
原文地址: https://www.cveoy.top/t/topic/m8b7 著作权归作者所有。请勿转载和采集!