Spring/Spring Batch
Spring Batch 특징
아이티.파머
2020. 5. 26. 17:12
반응형
2020/05/26 - [Spring/Spring Batch] - Spring Batch 특징
2020/05/26 - [Spring/Spring Batch] - Spring batch 기본 흐름 (tasklet, next flow)
2020/05/26 - [Spring/Spring Batch] - Spring Batch 분기/decide
2020/05/26 - [Spring/Spring Batch] - Spring Batch JobParameter
2020/05/26 - [Spring/Spring Batch] - Spring Batch chunk 지향 방식
- Spring Batch 특징
- 대용량 처리 / 복잡한 처리를 위한 프로젝트 (로그 처리, 정산작업등)
- 특정시간에 자동으로 실행되거나 특정 요청으로 실행 가능 함.
Spring batch Domain Object Definitions
- JobLauncher : Batch Job을 실행 시키는 역할 을 수행 Job과 Parameter를 받아서 실행하며 JobExecution을 반환한다.
- job : 업무의 단위, 실행시킬 작업의 단위 묶음 Job과 step은 1..n 으로 구성 할 수있다.
- step : 실제로 Job 안에서 해야할 업무(TASK)를 해야 하는 단위
- ItemReader : 플랫 파일이나, DB 에서 데이터를 읽어 드림
- ItemProcess : 읽어 드린 파일을 가공 할때
- ItemWriter : 가공한 파일을 최종적으로 저장(Output) 할때
- JobRepository
- JobRepository 는 JobLanuchar, job 및 step 구현체에 대한 CRUD 오퍼레이션 제공과 Job,JobExecution, StepExecution 과 관련된 모든 정보가 저장되는 곳이며. In-memory 와 db 저장 방법 두가지가 있다.
- Tasklet
- Step을 정의할때 input/output processing이 없는 경우에 사용되는 인터 페이스
- Tasklet은 Step 안에서 단일로 수행될 커스텀한 기능을 선언할 때 사용함
이처럼 Job 안에는 여러가지의 Step 이존재 하고 Step 에는 [tasklet], [Read,Prodess,Writer] 의 여러 묶음이 존재 한다.
Spring Batch Layered Architecure
- Run Tire : Scheduling 과 Application 을 담당 함
- JobTire : 전체적인 Job 실행을 담당한다. Job내의 Step 들을 순차적으로 수행
- Application Tire : Job을 실행하는데 필요한 컴포넌트들로 구성됨
- Data Tire : DataBase, File 등 물리적 데이터 소스와 결합이 이루어 지는 영역 (Output)
<그림 ....>
JobParameter
Batch를 실행함에 있어 파라미터를 넘겨주어 운영시 언제든지 데이터를 처리 해야 하는경우가 있다. 이때 JobParmeter를 사용 하도록 하며 @StepScope / @JobScope 에대해 간략하게 알아보자
- @JobScope : Step 선언문에서 사용 가능 함.
- @StepScope : Tasklet 이나, ItemReader,ItemWriter,ItemProcess 에서만 사용가능
JobLanucher
외부에서 Job을 실행 함 Http Parameter로 데이터를 받아 실행 해도 되며, 어떠한 형태로도 가능 하기때문에 원하는 때 언제나 Job을 실행 할 수 있다.
@SpringBootApplication
@EnableBatchProcessing
@Slf4j
public class CjAudienceBatchApplication {
@Autowired
JobLauncher jobLauncher;
@Autowired
@Qualifier("importAudienceJob")
Job importAudienceJob;
public static void main(String[] args) throws Exception {
int exitCode = SpringApplication.exit(SpringApplication.run(CjAudienceBatchApplication.class));
jobComponent.manualJob(args[0], args[1], args[2]);
System.exit(exitCode);
}
/**
* 수동 실행
*
* @param jobId
* @param pathToFile
* @param fileName
* @throws JobParametersInvalidException
* @throws JobExecutionAlreadyRunningException
* @throws JobRestartException
* @throws JobInstanceAlreadyCompleteException
*/
public void manualJob(String jobId, String pathToFile, String fileName) throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {
JobParameters params = new JobParametersBuilder()
.addString("JobID", jobId + String.valueOf(System.currentTimeMillis()))
.addString("pathToFile", pathToFile)
.addString("fileName", fileName)
.toJobParameters();
jobLauncher.run(importAudienceJob, params);
}
}
반응형