У меня есть задача, которая запускается каждые 1 минуту. Эта задача содержит пару методов, которые обрабатывают некоторые данные. Process1 считывает данные (один или несколько) в статусе 1 и в конце этого процесса обновляет статус до 2. Process2 считывает данные в состоянии 2 и т. Д. Так что теперь я хочу, чтобы улучшить эту обработку с помощью taskExecutor
(org.springframework.core.task.SimpleAsyncTaskExecutor
), чтобы запустить его параллельно:Как улучшить работу асинхронной задачи
public void process1() {
List<Object> objects = someDao.readDataWithStatus("1");
if (objects == null || objects.isEmpty()) {
return;
}
for (final Object object : objects) {
if (BooleanUtils.isTrue(isParalelProcess())) {
taskExecutor.execute(new Runnable() {
@Override
public void run() {
process(object);
}
});
} else {
process(object);
}
}
}
Допустим, у нас есть один объект с STATUS1 и мы хотим, параллельную обработку. Задача, которая запускается каждую минуту. Process1 читает данные со статусом 1, помещает его в taskExecutor и переходит к следующему методу. Этот метод не нашел объект, статус 2, поэтому здесь нечего делать. Через минуту процесс2 считывает объект со статусом 2 и так далее. Объект обработки занимает от 1 секунды до пары минут. Как вы можете видеть, происходит значительное замедление процесса, которое занимает всего пару секунд. Есть ли способ улучшить эту обработку?
Вы хотите запустить задачу 2 сразу после завершения задачи 1? – smajlo
есть только одна задача. – hudi
так что я не понимаю проблему – smajlo