Я бы сказал, что весенний пакет - это правильный подход.
Ну, я бы загрузил файл через API и вернул идентификатор процесса. Позже я могу спросить штат о процессе, если он сделан, или не удалось или что-то еще. Эта реализация деталей до. В этом случае не имеет значения, если вы загружаете файл с 10 записями, 1.000.000 или 100.000.000 записей.
Но, читая файл с большим количеством записей, я бы предложил обработать их порциями , Это идеально подходит для хранения данных в памяти небольшого размера и сохранения большого количества данных (размера куска) за один раз. Конечно, вы не должны загружать файл один раз, если это возможно, использовать поток или читать файл построчно.
При сохранении данных вы сохраняете фрагменты в пакете. Используйте PreparedStatemant и его команду addBatch / executeBatch, что, на мой взгляд, является самым быстрым способом сделать это в приложении.
В baeldung есть две хорошие записи, которые вы должны прочитать:
Baeldung.com - Spring Batch - Тасклеты против кусков - Взгляните на часть чанков.
Baeldung.com - Пакетная обработка в JDB C - Посмотрите на PreparedStatement