Как сделать систему завершения аукционов?

Проблема: Есть аукционы с определенным временем завершения. В это время нужно проставить им статус и перестать принимать ставки. Взять оплату с покупателя и т.д. Как сделать завершение торгов? Мое решение: Сделать кэш вида Map<время окончания, акцион> и сделать задачу в отдельном потоке, которая будет брать значения по ключу из кэша и завершать ауцион.

ExecutorService executorService = Executors.newFixedThreadPool(2);
        executorService.execute(() -> {
            while(true) {
                doSomething
            }
        });

Я понимаю, что этот кусок будет увеличивать нагрузку на CPU. У кого-нибудь есть примеры более элегантного решения?


Ответы (1 шт):

Автор решения: Pavel Rodionov

Итак. Что я сделал. При старте нового аукциона, я стартую новую джобу с триггером, который выставлен на время окончания аукциона. Джоба берет все активные аукционы за время триггера и начинает их обрабатывать по очереди. В это же время, производя списания денег со счета победителя. При старте системы так же берутся все активные аукционы и на них заводятся джобы. Всё сделано с помощью Quartz.

→ Ссылка