如何使用Spring Boot Batch Job更新数据库中的大数据

时间:2019-01-22 09:58:01

标签: java spring-boot spring-batch spring-batch-excel

我想更新庞大的用户数据库。

下面是包含20k用户记录的表格式。

enter image description here

我有一张Excel表格,其中包含以下新数据。此数据不是特定于用户的。这是所有用户共有的主数据。

enter image description here

任务是从表中读取用户特定的数据,然后从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。

我正在考虑为此使用Spring Boot批处理服务。因为我对Java和Spring Boot技术有一定的了解

任何人都可以建议我如何在这里进行吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道这种工作是否有任何Spring功能。

我要做的是:

1)使用 Apache POI 库,该库使我们能够轻松处理Excel文件。

2)读取Excel文件中的每个值(如果我理解您所说的内容,那将是一个新值)

3)用新值更新数据库值

这是使用Apache POI可以完成的操作的代码示例:例如,您在src / test / resources / Excel文件夹中获得一个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();
    }
}

然后您可以使用“行”或“单元格”对象处理数据。

尝试一下,然后返回此处获取更多详细信息。