아래 포스팅에서 이어진 내용입니다.
[springBoot] spring batch simple csvFileReader (feat. file)
목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch write to new file (feat. file) 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch simpleTextReader 아래 포스팅에서 이어진 내용입니다....
yaga.tistory.com
![[springBoot] spring batch csvFileReader write new File (테스트 영상 & 소스코드 포함) [springBoot] spring batch csvFileReader write new File (테스트 영상 & 소스코드 포함)](https://blog.kakaocdn.net/dn/cvOcuL/btsz92IOSks/257mQG033fj2PwKUUGgPa0/img.png)
기존의 csv파일을 읽어와서 살짝 가공한 후 새로운 csv파일에 데이터를 쓰는 예제
CsvJob2 😄
package com.test.lsy.batchsimpledbreader.batch;
import com.test.lsy.batchsimpledbreader.dto.CsvDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.FlatFileItemWriter;
import org.springframework.batch.item.file.builder.FlatFileItemWriterBuilder;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.transform.PassThroughLineAggregator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
@Slf4j
@RequiredArgsConstructor
@Configuration
public class CsvJob2 {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private static final int chunkSize = 5;
//이제 스텝을 호출할 job 생성
@Bean
public Job csvJob2_batchBuild() {
return jobBuilderFactory.get("csvJob2")
.start(csvJob2_batchStep())
.build();
}
//이제 스텝
@Bean
public Step csvJob2_batchStep() {
return stepBuilderFactory.get("csvJob2_batchStep")
.<CsvDto, CsvDto>chunk(chunkSize)
.reader(csvJob2_FileReader())
.processor(csvJob2_processor())
.writer((csvJob2_FileWriter()))
.build();
}
// 가공
private ItemProcessor<CsvDto, CsvDto> csvJob2_processor() {
return CsvDto -> {
//그냥 단순히 one필드뒤에 "@" 추가
CsvDto.setOne(CsvDto.getOne().toString() + " @ ");
return CsvDto;
};
}
// reader
@Bean
public FlatFileItemReader<CsvDto> csvJob2_FileReader() {
//리더 객체 생성
FlatFileItemReader<CsvDto> flatFileItemReader = new FlatFileItemReader<>();
//읽어올 csv파일 경로(클래스패스가 보통 resources 여기임)
flatFileItemReader.setResource(new ClassPathResource("sample/csvJob1_input.csv"));
//1번 째 라인은 보통 헤더(제목)이므로 읽을 때 생략
flatFileItemReader.setLinesToSkip(1);
//라인을 읽기 위한 객체
DefaultLineMapper<CsvDto> defaultLineMapper = new DefaultLineMapper<>();
//구분자를 위한 객체
DelimitedLineTokenizer delimitedLineTokenizer = new DelimitedLineTokenizer();
//Dto에 있는 필드와 매핑(1번 째 토큰부터 순서대로 Dto의 필드에 매핑)
delimitedLineTokenizer.setNames("one", "two");
//구분자를 기준으로 데이터를 자를거야(csv의 구분자 설정)
delimitedLineTokenizer.setDelimiter(":");
//데이터를 넣기 위한 객체
BeanWrapperFieldSetMapper<CsvDto> beanWrapperFieldSetMapper = new BeanWrapperFieldSetMapper<>();
//TwoDto가 타깃이야(여기에 데이터를 넣을거야)
beanWrapperFieldSetMapper.setTargetType(CsvDto.class);
//구분자 설정된 객체
defaultLineMapper.setLineTokenizer(delimitedLineTokenizer);
//어떤 필드에 넣을지 설정된 객체
defaultLineMapper.setFieldSetMapper(beanWrapperFieldSetMapper);
//구분자와 필드를 설정한 객체를 최종적으로 세팅
flatFileItemReader.setLineMapper(defaultLineMapper);
//최종적으로 Dto를 담은 객체를 반환
return flatFileItemReader;
}
//writer
@Bean
FlatFileItemWriter<CsvDto> csvJob2_FileWriter() {
return new FlatFileItemWriterBuilder<CsvDto>()
.name("csvJob2_FileWriter")
//아이템을 쓸 경로
.resource(new FileSystemResource("output/csvJob2_output.csv"))
//필수값인데 지금은 그냥 프로세서에서 가공한 그대로 반환(아이템 받은 그대로 문자열로 반환하는 역할)
.lineAggregator(new PassThroughLineAggregator<>())
.build();
}
}
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
reference: https://www.youtube.com/watch?v=wy99cPHlMlA&list=PLogzC_RPf25HRSG9aO7qKrwbT-EecUMMR
다음 내용
[springBoot] spring batch JsonReader logPrint (feat. JSON)
목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch csvFileReader write new File (feat. file) 목차 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch simple csvFileReader (feat. file) 목차 아래...
yaga.tistory.com
'IT > Live Coding' 카테고리의 다른 글
[springBoot] spring batch JsonReader Filter Write (테스트 영상 & 소스코드 포함) (52) | 2023.11.11 |
---|---|
[springBoot] spring batch JsonReader logPrint (테스트 영상 & 소스코드 포함) (52) | 2023.11.11 |
[springBoot] spring batch simple csvFileReader (테스트 영상 & 소스코드 포함) (51) | 2023.11.11 |
[springBoot] spring batch write to new file (테스트 영상 & 소스코드 포함) (55) | 2023.11.10 |
[springBoot] spring batch simpleTextReader (테스트 영상 & 소스코드 포함) (54) | 2023.11.10 |
댓글