ItemReaderPractiConfiguration 클래스를 만들어 Configuration 클래스로 등록하고 JobBuilderFactory와 StepBuilderFactory를 주입 받는다.
incrementer 를 설정해 JobParameter를 각각 다르게 하여 동일한 Job을 실행 가능하게 한다.
Job 에서 실행할 Step을 생성하는데 INPUT, OUTPUT 둘다 Person이다. (Chunk방식)
ItemReader에서 CSV 파일을 읽으려면 FlatFileItemReader 객체를 이용해 읽어야 한다.
public FlatFileItemReader<Person> csvReader() throws Exception{
DefaultLineMapper<Person> lineMapper = new DefaultLineMapper<>();
//csv 를 한줄씩 읽게 해주는 객체
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
//csv에서 읽은 걸 매핑하기 위해 각 필드를 설정하는 객체
tokenizer.setNames("id","name","age","address");
lineMapper.setLineTokenizer(tokenizer); //매핑한 Tokenizer를 lineMapper에 설정
lineMapper.setFieldSetMapper(fieldSet -> {
int id = fieldSet.readInt("id");
String name = fieldSet.readString("name");
String age = fieldSet.readString("age");
String address = fieldSet.readString("address");
return new Person(id,name,age,address);
//csv 파일Person 객체로
});
FlatFileItemReader<Person> itemReader =
new FlatFileItemReaderBuilder<Person>() //객체 생성편하게 Builder사용
.name("csvItemReader")
.encoding("UTF-8")
.resource(new ClassPathResource("test-output.csv"))
.linesToSkip(2) //시작 두줄 스킵
.lineMapper(lineMapper) //위에서 계속 만들었던 lineMapper
.build();
itemReader.afterPropertiesSet();
return itemReader;
}
DefaultLineMapper --> csv 파일을 한줄씩 읽게 해주는 객체
DelimitedLineTokenizer --> csv파일에서 읽은 걸 매핑하기 위해 각 필드를 설정하는 객채(구분자에 의해 구분함 기본 , 임)
FieldSet --> SpringBatch에서 파일타입의 작업을 할때 사용하는 객체 JDBC에 ResultSet과 비슷하다
ItemWriter는 간단하게 잘 읽어왔는지만 테스트하기용으로 작성했다.
Reader에서 읽은 걸 가져와서 List(위에서 지정한 Chuk 사이즈만큼 나눠서)로 받아서 뽑아본다 여기서 chunkSize는 5이다 OUTPUT 타입도 Person으로 했으니 출려되는건 Person이다.
5개씩 쪼개서 실행되는 걸 볼 수 있다. 여기서 읽은 csv 파일은 저번 글에서 작성한 csv 쓰기에서 만든 csv 파일을 사용한 것이다!
'Spring Batch' 카테고리의 다른 글
Spring batch - ChunkListener, StepListener (0) | 2022.12.28 |
---|---|
Spring Batch - JPA 데이터 읽기 (0) | 2022.12.26 |
Spring Batch - csv파일 쓰기 (0) | 2022.12.23 |
Spring Batch - JdbcCursorItemReader (0) | 2022.12.22 |
SpringBatch ChunkSize를 JobParameters 로 사용하기 (1) | 2022.12.19 |