В Java реализована автоматическая отмена неоплаченного тайм-аута заказа.

алгоритм

После покупки товара в электронной коммерции, если заказ размещен без оплаты, обычно предлагается завершить оплату в течение 30 минут, в противном случае заказ будет автоматическим. Например, размещение заказа на Jingdong для завершения платежа:file

Если он превышает 24 часа, заказ будет автоматически отменен.Следующее использует таймер Java для реализации функции отмены заказа по времени.

  • Таймер таймер

Таймер — это инструмент для планирования выполнения задач. Задачи могут выполняться одновременно или многократно. Система запускает поток для выполнения всех задач синхронизации.

  • Задача синхронизации TimerTask

TimerTask — это абстрактный класс, реализующий Runnable, а реализация Runnable означает создание многопоточных задач.

Создать задачу таймера

TimerTask — это абстрактный класс. Абстракция предназначена для повторного использования кода. Чтобы создать класс, наследующий TimerTask:

public class CancelOrderTimeTask extends TimerTask {

    private Long id;

    public CancelOrderTimeTask(long id) {
        this.id = id;
    }


    @Override
    public void run() {
        // 执行取消订单
        cancelOrder(id); 
        System.out.println(getCurrentTime() + " 时间取消订单,订单id:" + id);

    }

    private String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return sdf.format(date);
    }
}

существуетrunспособ выполнения задачи отмены заказа.

Поскольку этот метод не создает bean-компонент, при вызове dao или других bean-компонентов используйтеApplicationContextВозьми фасоль.

Таймер таймера вызывает TimerTask

Создайте новый таймер и вызовите его с помощью метода schedule.Метод имеет два параметра: первый — это экземпляр задачи, а другой — время задержки для вызова задачи в миллисекундах. код показывает, как показано ниже:

@RestController
public class TimerController {


    @GetMapping("/timer")
    public String timer(long id) {
        Timer timer = new Timer();
        CancelOrderTimeTask timeTask = new CancelOrderTimeTask(id);
        System.out.println("当前时间是" + getCurrentTime());
        //10秒后执行任务
        timer.schedule(timeTask,10 * 1000);
        return "ok";
    }

    private String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return sdf.format(date);
    }
}

После вызова метода консоль выводит следующее содержимое, указывающее, что вызов синхронизации выполнен успешно.

当前时间是2022-01-24 00:05:09
2022-01-24 00:05:19 时间取消订单,订单id:3

Суммировать

  • Сначала создайте запланированную задачу, наследуйте TimerTask и напишите бизнес-логику в методе запуска.
  • Используйте Timer для вызова метода расписания, который записывает экземпляр TimerTask вместе с временем задержки.

исходный код

исходный код на гитхабе

Если вы считаете, что статья была вам полезна, ставьте лайк!