๐ค ๋ฐฐ๊ฒฝ
ํ๋ก์ ํธ ๋ฐฐ์น ๋ชจ๋ ๊ฐ๋ฐ ์ปจ๋ฒค์ ์ ์ ํ๋ ๊ณผ์ ์์ ์ฒ์์ Job ์ค์ ํ์ผ์ ๊ด๋ จ๋ ๋ชจ๋ Bean(Job, Step, ItemReader, ๋ฑ)์ ๋ฃ์๊ณ ํ์ ๋ "๊ทธ๋ฌ๋ฉด Chunk ๊ธฐ๋ฐ Step์ ๊ตฌ์ฑ ์ค์ ItemReader์ ItemWriter ์ค ํ๋๋ ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋๋ ๊ธฐ๋ฅ์ด ๋ณต์กํด์ ๋ณ๋๋ก ๋ง๋ ๋ค๊ณ ํ๋ฉด ์ด๋ป๊ฒ ํ๋ ๊ฒ ์ข์๊น?" ๋ผ๋ ์ง๋ฌธ์ด ๋์๋ค.
์๋ฅผ ๋ค๋ฉด, ItemReader๋ ๊ตฌํ์ด ๋จ์ํด์ FlatFileItemReader๋ฅผ ์ฌ์ฉํ๊ณ , Writer๋ ๋ณต์กํด์ ๋ณ๋ ํด๋์ค์ ItemWriter๋ฅผ ๊ตฌํํ๋ค๋ ์๋ฏธ์ด๋ค.

ํด๋น ์ง๋ฌธ์ ๋ฃ๊ณ ๋๋ "ItemReader๋ ์ค์ ํ์ผ์ Bean์ผ๋ก ๋ฑ๋กํ๊ณ , Writer๋ ๋ณ๋ ํด๋์ค๋ก ๋นผ๋ ๊ฒ ๋ง๋ ๊ฑธ๊น?" ์ด๋ฐ ์๋ฌธ์ด ๋ค๋ฉด์ "๋ง์ฝ, ์คํ๋ง์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋ฐฐ์น ํด๋์ค๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ์ง ์๊ณ ์์ํด์ ๊ตฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?"๋ผ๋ ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ค.
@Bean
@StepScope
public FlatFileItemReader<FileItem> blackShibaItemReader(@Value("#{jobParameter[filePath]}") String filePath) {
DefaultLineMapper<FileItem> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames("id","name","address");
lineMapper.setLineTokenizer(tokenizer);
lineMapper.setFieldSetMapper(fieldSet -> {
int id = fieldSet.readInt("id");
String name = fieldSet.readString("name");
String address = fieldSet.readString("address");
return new FileItem(id,name,address);
});
return new FlatFileItemReaderBuilder<FileItem>()
.name("blackShibaItemReader")
.encoding("UTF-8")
.resource(new ClassPathResource(filePath))
.linesToSkip(1)
.lineMapper(lineMapper)
.build();
}
์ ์ฝ๋์ฒ๋ผ Bean์ผ๋ก ๋ฑ๋กํ๋ FlatFileItemReader๋ฅผ ๋ณ๋ ํด๋์ค๋ก ์์๋ฐ์์ ๊ตฌํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๊ฒฝ์ฐ์ JobParameter๋ ์ด๋ป๊ฒ ์ฃผ์ ํด ์ค ์ ์์๊น?
@Component
@StepScope
public class BlackShibaItemReader extends FlatFileItemReader<FileItem> {
public BlackShibaItemReader(@Value("#{jobParameter[filePath]}") String filePath) {
super();
DefaultLineMapper<FileItem> lineMapper = new DefaultLineMapper<>();
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames("id","name","address");
lineMapper.setLineTokenizer(tokenizer);
lineMapper.setFieldSetMapper(fieldSet -> {
int id = fieldSet.readInt("id");
String name = fieldSet.readString("name");
String address = fieldSet.readString("address");
return new FileItem(id,name,address);
});
setName("blackShibaItemReader");
setEncoding("UTF-8");
setResource(new ClassPathResource(filePath));
setLinesToSkip(1);
setLineMapper(lineMapper);
}
}
์คํ๋ง ๋ฐฐ์น๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ํด๋์ค์์๋ setter๋ฅผ ํตํด์ ์ฃผ์ ์ด ๊ฐ๋ฅํ๋๋ก ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์๋ค.
๋ฐ๋ผ์ ์์ฑ์ ๋จ์์ ๋์ผํ ๊ธฐ๋ฅ์ setter๋ฅผ ํตํด ์ค์ ํ๋ฉด ๋๋ค.
๋ง์ฝ JobParameter ๋ฑ์ ์ฃผ์ ๋ฐ๋ ๊ฒฝ์ฐ @StepScope ์ด๋ ธํ ์ด์ ์ ํด๋์ค ๋จ์ ์ค์ ํด์ผ ํ๋ค.
'Spring > Batch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Batch + Quartz๋ฅผ ํ์ฉํ ์ค์ผ์ค๋ฌ ๊ตฌํํ๊ธฐ (0) | 2023.08.06 |
---|---|
Spring Batch 5 ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2023.07.30 |
[Batch] ์คํ๋ง ๋ฐฐ์น ๊ฐ๋ , ํน์ง๊ณผ ์ฉ์ด ์ ๋ฆฌ (1) | 2023.04.22 |
๋๊ธ