данные из csv файла, приходящего пост запросом, количество записей заранее неизвестно. Необходимо как-то выдавать наружу ответ в виде текущего статуса обработки файла или что-нибудь типо процента выполнения. Вопрос, что лучше использовать для этого дела? Пока выдаю ответ через StreamingResponseBody(в момент загрузки файла в бд дополнительно в outputStream пишу джейсон с загруженной сущностью, в конце выдаю сообщение о том, что загрузка успешно завершена), но может есть решение лучше?
Загружаешь файл, отдаешь идентификатор работы и в фоне обрабатываешь Потом по идентификатору проверяешь статус
То есть я на запрос ответ сразу возвращаю, а сам в фоне продолжаю грузить?
Нет. В контроллере просто сохраняешь сам файл и закидываешь, например, в БД запись с информацией о файле (id, status, и т.п.) и возвращаешь ID этой записи. Тем временем какой-то параллельно работающий фоновый процесс, забирает из очереди (БД) запись , открывает файл и обрабатывает его. А в конце (или в процессе ) меняет у него статус. Процент обработки тоже можешь колонку сделать, при желании. Фронтенд может вызывать эндпоинт периодически и чекать status у файла , там обычный запрос в БД будет
А как примерно реализуется этот параллельно работающий процесс фоновый, забирающий данные из бд? пока этот момент не очень понятен
И вопрос, а сохранять файл сам обязательно? Или может можно как то это все одним потоком класть в бд
Отдельный поток делаешь и в нем обрабатываешь
Это может быть в виде @Async?
Обсуждают сегодня