๐ spring-batch 3
โ๏ธ JobExecutionContext
- Step ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ์ํด ์ฌ์ฉ
ex) job์ execution context ์ ๊ทผJobExecution jobExecution = stepExecution.getJobExecution(); JobInstance jobInstance = jobExecution.getJobInstance(); ExecutionContext jobExecutionExecutionContext = jobExecution.getExecutionContext();
โ๏ธ StepExecutionContext
- ํ Step ๋ด์์๋ง ๋ฐ์ดํฐ ์ ํจํ๋ค.
- Step ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์๋๋ค. โ
ex) step์ execution context ์ ๊ทผStepExecution stepExecution = contribution.getStepExecution(); ExecutionContext stepExecutionExecutionContext = stepExecution.getExecutionContext();
โ๏ธ ๋ฐฐ์น ์ฒ๋ฆฌ 2๊ฐ์ง ๋ฐฉ๋ฒ
Tasklet
- ๋น๊ต์ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
- ๋๋ ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ ์คํ๋ ค ๋ ๋ณต์กํ ์ ์๋ค.
- ํ๋์ ํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ๋๋์ด ์ฒ๋ฆฌํ๊ธฐ๋ ๋ถ์ ํฉํ๋ค. (๊ฐ๋ฅ์ ํจ)
Chunk
- ๋๋์ฒ๋ฆฌ์ ๊ฒฝ์ฐ Tasklet๋ณด๋ค ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
ex) 10000๊ฐ ๋ฐ์ดํฐ๋ฅผ 1000๊ฐ์ฉ 10๊ฐ ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด ์ฒ๋ฆฌ
Tasklet์ผ๋ก ์ฒ๋ฆฌํ๋ฉด 10000๊ฐ๋ฅผ ํ๋ฒ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ์๋์ผ๋ก 1000๊ฐ์ฉ ๋ถํ
โ๏ธ ChunkBasedStep
stepBuilderFactory.get("stepName")
.<String, String>chunk(10) // ๋ฐฐ์น๋ฅผ 10๋ฒ์ ๋๋์ด ์ฒ๋ฆฌ
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build()
- itemReader() ์์ null์ ๋ฐํํ ๋๊น์ง step ๋ฐ๋ณตํ๋ค.
โ๏ธ TaskBasedStep
stepBuilderFactory.get("stepName")
.tasklet()
.build();
โ๏ธ chunk ๋ฉ์๋
<input,output>chunk(int)
- itemReader์์ input ํ์ ์ผ๋ก ๋ฆฌํดํ๋ค.
- itemProcessor์์ input ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ output ํ์ ์ผ๋ก ๋ฆฌํดํ๋ค.
- itemWriter๋ itemProcessor๋ก๋ถํฐ output ํ์
๋ฆฌ์คํธ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ค.
- outputํ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ chunk ์ฌ์ด์ฆ
- itemWriter์์ ํ step์์ ์ฒ๋ฆฌํ๋ ํฌ๊ธฐ = chunk size
โ๏ธ ListItemReader
์์ฑ์ ํ๋ผ๋ฏธํฐ๋ก List<T>๋ฅผ ๋ฐ๋๋ค.
- ์์ ์์ ItemReader์์ List๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ค.
โ๏ธ Task ๊ธฐ๋ฐ step์์ chunk ๊ตฌํ
- ์ฝ๋๋ก chunk ์ฌ์ด์ฆ๋ฅผ ์ง์ ํ์ฌ ๋ฐฐ์น ๋ฐ์ดํฐ๋ฅผ ์๋ผ์ ๊ตฌํํ๋ค.
StepExecution stepExecution = contribution.getStepExecution();
int chunkSize = 10;
int fromIdx = stepExecution.getReadCount();
int toIdx = fromIdx + chunkSize;
if (fromIdx >= testData.size()) return RepeatStatus.FINISHED;
log.info("(task) chunk size = {}", testData.subList(fromIdx, toIdx).size());
stepExecution.setReadCount(toIdx);
return RepeatStatus.CONTINUABLE;
โ๏ธ Task ๊ธฐ๋ฐ step์์ chunk ๊ตฌํ (JobParameters ์ฌ์ฉ)
์คํ์์ ์ ํ๋ผ๋ฏธํฐ์ ๋ํ ์ ์ฐํ ์กฐ์ ๊ฐ๋ฅํ๋ค.
StepExecution stepExecution = contribution.getStepExecution();
JobParameters jobParameters = stepExecution.getJobParameters();
int chunkSize =
Integer.parseInt(jobParameters.getString("chunkSize", "0"));
โ๏ธ ํ๋ผ๋ฏธํฐ ์ง์
Edit Contribution - Program arguments
-chunkSize=20 --job.names=chunkProcessingJob
๐ ์๊ฐ์ธ์ฆ

ํจ์คํธ์บ ํผ์ค [์ง์ฅ์ธ ์ค๋ฌด๊ต์ก]
ํ๋ก๊ทธ๋๋ฐ, ์์ํธ์ง, UX/UI, ๋ง์ผํ , ๋ฐ์ดํฐ ๋ถ์, ์์ ๊ฐ์, The RED, ๊ตญ๋น์ง์, ๊ธฐ์ ๊ต์ก, ์๋น์ค ์ ๊ณต.
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
'Spring Batch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 24์ผ์ฐจ - Spring Batch 6 (0) | 2021.09.29 |
|---|---|
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 23์ผ์ฐจ - Spring Batch 5 (0) | 2021.09.28 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 22์ผ์ฐจ - Spring Batch 4 (0) | 2021.09.27 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 20์ผ์ฐจ - Spring Batch 2 (0) | 2021.09.25 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 19์ผ์ฐจ - Spring Batch 1 (0) | 2021.09.24 |