Как обновить огромные данные в базе данных с помощью Spring Boot Batch Job
Я хочу обновить огромную базу данных пользователей.
Ниже приведен формат таблицы, который содержит 20 тыс. Записей пользователей.
У меня есть один лист Excel, в котором есть новые данные, как показано ниже. Эти данные не являются специфическими для пользователя. Это основные данные, общие для всех пользователей.
Задача - прочитать пользовательские данные из таблицы, а затем прочитать новые данные из таблицы Excel, соответствующие старым данным, после этого обновить новые данные в той же таблице для этого пользователя.
Например -
- Шаг 1 - Считать данные (use_id, node_id и kmap_type) из базы данных для user_id 95961800
- Шаг 2 - Чтение нового значения из Excel, соответствующего базе данных node_id(9908), которая составляет 7707,1000,7707
- Шаг 3 - Обновите эти новые значения в той же таблице для того же пользователя с KMAP_TYPE как SUBINDUSTRY,FUNCTION и ROLE соответственно.
Я думаю об использовании весеннего загрузочного пакетного сервиса для этого. потому что у меня есть средние знания в технологии Java и весенней загрузки
Кто-нибудь может подсказать, пожалуйста, как мне поступить здесь?
Заранее спасибо.
1 ответ
Я не знаю, есть ли какие-нибудь функции Spring для такой работы.
Что бы я сделал, это:
1) использовать Apache POI lib, что позволяет легко обрабатывать файл Excel.
2) прочитайте каждое значение в файле Excel (если я хорошо понял, что вы сказали, это может быть новое значение)
3) обновить значения базы данных новыми
Вот пример кода того, что можно сделать с помощью Apache POI: вы получаете файл Excel в папке src/test/resources/Excel (например) и сохраняете его в объекте "Рабочая книга".
@Test
public void FindExistingExcelFileTest() {
System.out.println("\n----- FindExistingExcelFile -----");
String pathExcel = "src/test/resources/Excel/";
String fileName = "yourExcelFileHere.xlsx";
File fileExcel = new File(pathExcel + fileName);
try {
InputStream inp = new FileInputStream(fileExcel);
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet1 = wb.getSheetAt(0);
System.out.println("Sheet name = " + sheet1.getSheetName());
Assert.assertNotNull(sheet1);
wb.close();
} catch (IOException | InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Затем вы можете обрабатывать данные с помощью объекта "Row" или "Cell".
Попробуйте это и вернитесь сюда для более подробной информации.