2

我有一个以 json 格式写入文件的序列化实体列表。我需要使用弹簧批处理从文件中读取它们(然后处理它们并写入数据库)。

我发现只有 Spring Batch 提供的平面文件、DB 和 Xml 阅读器。解析json的正确方法是什么?

我要实施的方法是:

1. read the whole file with FlatFile reader
2. parse it with Jaxson in `read` method

我是春季批次的新手,所以在这里我需要一条建议。这种方法正确吗?它不违反任何spring-batch原则吗?或者我应该使用另一个?

4

2 回答 2

0

您的方法可行,但我建议您使用Jackson Streaming API直接解析 JSON 文件,而不是有一个额外的步骤来读取整个文件然后处理它。

JsonFactory jsonFactory = new JsonFactory();
JsonParser jp = jsonFactory.createJsonParser(file);
于 2013-03-04T15:25:25.930 回答
0

您可以JsonItemReader在 Spring Batch 中使用。在我的例子中,我将 JSON 文件名传递为JobParameter.

我的 JSON 文件中的示例 JSON 内容。

{ 
   "obj1": "abc", 
   "obj2": "def" 
}

MyObj 类:

@Data
@Builder
public class MyObject{
    String obj1;
    String obj2;
}

这是我的读者。

@Bean
@StepScope
public JsonItemReader<MyObj> myReader() {

    LOGGER.info(LOG_TEMPLATE,
            getClass().getSimpleName(),
            Thread.currentThread().getStackTrace()[1].getMethodName(),
            "Inside Reader...");

    final ObjectMapper mapper = new ObjectMapper();

    final JacksonJsonObjectReader<MyObj> jsonObjectReader = new JacksonJsonObjectReader<>(
            MyObj.class);
    jsonObjectReader.setMapper(mapper);

    final String filePath = config.getRootfolder() + SEPERATOR + inputInfo.getFileName();

    return new JsonItemReaderBuilder<MyObj>().jsonObjectReader(jsonObjectReader)
            .resource(new FileSystemResource(filePath))
            .name("myReader")
            .build();

}
于 2021-04-03T13:29:46.227 回答