java - Spring Boot 批处理读取多个 Json 文件并转换为 POJO

标签 java spring-boot spring-batch

我有一个文件夹,其中包含数千个文本文件,其中包含我需要读取的 JSON 内容,将其转换为 POJO,然后保存到 MySQL 数据库中。我打算使用 Spring Batch 应用程序。

这是到目前为止的问题,我所做的研究仅显示读取多个 CSV 文件或 XML 文件,而没有 JSON 数据。具体来说,我需要将这个用于解析 CSV 文件的方法转换为 JSON 解析器。

@Bean
public FlatFileItemReader<Person> reader() {
    FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();
    reader.setLineMapper(new DefaultLineMapper<Person>() {{
        setLineTokenizer(new DelimitedLineTokenizer() {{
            setNames(new String[] {"firstname", "lastname", "email", "age"});
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
            setTargetType(Person.class);
        }});
    }});
    return reader;
}

此代码解析 JSON 文件:

JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("C:\\path\\sample.json"));

方法可能是这样的

@Bean
Public FileReader<Person> reader() {
    FileReader<Person> reader = new FileReader<Person>();

    /**** need help on what to do here ****/

    return reader;
}

还看到我正在读取目录中的所有文件,我正在以这种格式传递该目录的值

@Value(value="C:\\path\\*.json")
private Resource[] resources;

因此,我需要有关如何使用此值(所有文件的目录)而不是我之前显示的值(单个文件位置)的帮助

Object obj = parser.parse(new FileReader("C:\\path\\sample.json"));

最佳答案

您可以使用 MultiResourceItemReaderJsonItemReader 作为委托(delegate)。这是一个简单的例子:

@Bean
public JsonItemReader<Person> jsonItemReader(Resource[] resources) {
   JsonItemReader<Person> delegate = new JsonItemReaderBuilder<Person>()
      .jsonObjectReader(new JacksonJsonObjectReader<>(Person.class))
      .name("personItemReader")
      .build();

   MultiResourceItemReader<Person> reader = new MultiResourceItemReader<Person>();
   reader.setDelegate(delegate);
   reader.setResources(resources);
   return reader;
}

您可以在 reference documentation 中找到有关 JsonItemReader 的更多详细信息。 .

希望这有帮助。

关于java - Spring Boot 批处理读取多个 Json 文件并转换为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54102645/

相关文章:

java - 我在 Spring Boot 版本 2.2.0 的 Spring Batch 中遇到错误

spring - 将 spring-batch-admin 集成到现有的 spring boot 后无法导入属性

java - 似乎不包含 CMakeLists.txt

Spring Boot 安全性 + JWT

java - 内角的余弦定律

spring - 如何在独立的 Turbine 应用程序中激活/turbine.stream 端点

java - 使用 Hibernate 的 Spring Boot 应用程序如何与多个结构相同的表进行交互?

java - Spring batch writer节流

java - RxJava : calling unsubscribe from within onNext

java - @Startup @Singleton 在 WebLogic (EJB 3.1) 中实例化了两次