์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค.
[springBoot] spring batch write to new file (feat. file)
์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring batch simpleTextReader ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring batch simpleReader insert other table( feat. JPA) ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์
yaga.tistory.com
๊ตฌ๋ถ์ ์๋ csvํ์ผ์ ์ฝ์ด์ ๋ก๊ทธ ์ถ๋ ฅํ๋ ๋จ์ํ ์์
CsvJob1 ๐
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.file.FlatFileItemReader;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
@Slf4j
@RequiredArgsConstructor
@Configuration
public class CsvJob1 {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private static final int chunkSize = 5;
//์ด์ ์คํ
์ ํธ์ถํ job ์์ฑ
@Bean
public Job csvJob1_batchBuild() {
return jobBuilderFactory.get("csvJob1")
.start(csvJob1_batchStep())
.build();
}
//์ด์ ์คํ
@Bean
public Step csvJob1_batchStep() {
return stepBuilderFactory.get("csvJob1_batchStep")
.<CsvDto, CsvDto>chunk(chunkSize)
.reader(csvJob1_FileReader())
.writer(CsvDto -> CsvDto.forEach(csvDto -> {
//์ฌ๊ธฐ์ ๋จ์ํ ๋ฃจํ ๋๋ฉฐ ๋ก๊ทธ๋ง ์ถ๋ ฅ
log.debug("csvDto = [{}]", csvDto.toString());
}))
.build();
}
// reader
@Bean
public FlatFileItemReader<CsvDto> csvJob1_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;
}
}
CsvDto ๐ค
package com.test.lsy.batchsimpledbreader.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
//๊ตฌ๋ถ์๊ฐ ์๋ ํ์ผ์ ์ฝ๊ธฐ ์ํจ
public class CsvDto {
private String one;
private String two;
@Override
public String toString() {
return one + two;
}
}
๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
reference: https://www.youtube.com/watch?v=wy99cPHlMlA&list=PLogzC_RPf25HRSG9aO7qKrwbT-EecUMMR
๋ค์ ๋ด์ฉ
[springBoot] spring batch csvFileReader write new File (feat. file)
๋ชฉ์ฐจ ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring batch simple csvFileReader (feat. file) ๋ชฉ์ฐจ ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring batch write to new file (feat. file) ์๋ ํฌ์คํ ์์
yaga.tistory.com
๋๊ธ