Расписание Java для периодического запуска против Thread.sleepJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Расписание Java для периодического запуска против Thread.sleep

Сообщение Anonymous »

Я столкнулся с конкретной проблемой. Я запланировал выполнение задачи каждый день в определенное время. Сама задача состоит из следующего:
  • Вызов БД для проверки возможности обновления данных.
  • Http-запрос на внешний сервер, который возвращает список данных.
  • Проверка и преобразование каждого элемента списка в модель предметной области.
  • Повторный вызов внешнего сервера для подсписок исходного списка данных для получения дополнительной информации (вот в чем собственно проблема. И я никак не контролирую реакцию внешнего сервера).
  • Сохранение результата в базе данных list.
  • Сохранение метаданных о задаче в БД.
Проблема в том, что внешний сервер ограничивает объем запросов в минуту (об/мин) до очень низкого числа, скажем, 20. Таким образом, если я получу подсписок для дополнительных вызовов размером 100, то я смогу обновить только пятую часть этого количества, а остальная часть останется без дополнительной информации (учитывая общая скорость обработки задачи). В настоящее время я реализовал ограничитель скорости, который в основном приостанавливает задачу на минуту (например, когда количество запросов достигает 20), используя Thread.sleep, а затем продолжает снова и снова и т. д.
Это просто оставляет целое поток занят в зависимости от размера исходного списка примерно на 5-6 минут. Мне было интересно, могу ли я как-то изменить способ вызова внешнего сервера, например, запланировать вызов запросов на основе ограничения количества оборотов в минуту.
Любая помощь будет оценена по достоинству.
Редактировать. Я программно планирую задачу с помощью Spring ThreadPoolTaskScheduler. Метод update — это задача, которую я выполняю.
public abstract class AbstractUpdateScheduler {
protected ThreadPoolTaskScheduler taskScheduler;

protected abstract void setTaskScheduler(ThreadPoolTaskScheduler taskScheduler);
public abstract void update();
public abstract String getCron();

@PostConstruct
private void execute() {
taskScheduler.schedule(this::update, new
CronTrigger(getCron()));
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... read-sleep
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Любая разница между kernel32.dll Sleep и Thread.Sleep()
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Thread.Sleep() против Task.Delay().Wait()
    Гость » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Гость
  • Thread.Sleep против Task.Delay?
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Android 13 планшет предотвращает WebSocket в WebView Densonce на экране Sleep Sleep
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Когда Java Thread.sleep выдает InterruptedException?
    Гость » » в форуме JAVA
    0 Ответы
    36 Просмотры
    Последнее сообщение Гость

Вернуться в «JAVA»