文件:
[ {"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)