【问题标题】:How to parse json-file with spring batch?如何用spring批处理解析json文件?
【发布时间】:2013-03-04 15:00:48
【问题描述】:

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

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

我要实现的方法是:

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

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

【问题讨论】:

    标签: java json spring spring-batch


    【解决方案1】:

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

    JsonFactory jsonFactory = new JsonFactory();
    JsonParser jp = jsonFactory.createJsonParser(file);
    

    【讨论】:

    • @Roman 添加到这个答案,你真的不想出于任何原因将整个文件读入内存。 Benoit 的方法更受欢迎,因为它可以保持较低的内存使用率。随着您对 Spring Batch 越来越熟悉,您将能够编写自己的 JSON ItemReader,甚至可以将其贡献回项目。祝你好运。
    【解决方案2】:

    您可以在 Spring Batch 中使用 JsonItemReader。在我的例子中,我将 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();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多