SpringBatch读取Json

65 阅读1分钟

文件:

[  {"id": 1, "name": "dafei", "age": 15},  {"id": 2, "name": "erfei", "age": 16},  {"id": 3, "name": "sanfei", "age": 17},  {"id": 4, "name": "sifei", "age": 18},  {"id": 5, "name": "wufei", "age": 19}]

对象:

@Data
public class User {
    private Long id;
    private String name;
    private int age;
//    private String address;

}

代码实现:

package com.springBatch.demo.JsonFlatReader;


import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.json.JacksonJsonObjectReader;
import org.springframework.batch.item.json.JsonItemReader;
import org.springframework.batch.item.json.builder.JsonItemReaderBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;

import java.util.List;

@EnableBatchProcessing
@SpringBootApplication
public class JsonFlatReaderJob {
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    // first  job--step--chunk--itemreader --writer

    @Bean
    public ItemWriter<User> itemWriter() {
        return new ItemWriter<User>() {
            @Override
            public void write(List<? extends User> items) throws Exception {
                items.forEach(System.out::println);
            }
        };
    }

//这里创建reader对象
    @Bean
    public JsonItemReader<User> jsonItemReader() {
        //创建reader对象
        JacksonJsonObjectReader<User> jacksonJsonObjectReader = new JacksonJsonObjectReader<>(User.class);
        //创建解析规则
        ObjectMapper objectMapper = new ObjectMapper();
        //将解析规则设置到reader对象中
        jacksonJsonObjectReader.setMapper(objectMapper);//解析规则

        //返回设置
        return new JsonItemReaderBuilder<User>()
                .name("userItemReaderJson")//名字
                .resource(new ClassPathResource("user.json"))//位置
                .jsonObjectReader(jacksonJsonObjectReader)//reader对象
                .build();
    }


    @Bean
    public Step step2() {
        return stepBuilderFactory.get("step2")
                .<User, User>chunk(1)
                .reader(jsonItemReader())
                .writer(itemWriter())
                .build();
    }

    @Bean
    public Job job2() {
        return jobBuilderFactory.get("json-flat-reader-job")
                .start(step2())

      .build();
    }

    public static void main(String[] args) {                            
        //启动类的名字记得别复制错了  刚才复制的之前的  每次启动都是之前的结果 一直以为是注入错误 后来才发现启动类不对
        SpringApplication.run(JsonFlatReaderJob.class, args);
    }
}

结果:

User(id=1, name=dafei, age=15)
User(id=2, name=erfei, age=16)
User(id=3, name=sanfei, age=17)
User(id=4, name=sifei, age=18)
User(id=5, name=wufei, age=19)