관리 메뉴

IT.FARMER

Spring Batch 특징 본문

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);
    }


}
반응형

'Spring > Spring Batch' 카테고리의 다른 글

Spring Batch chunk 지향 방식  (0) 2020.05.26
Spring Batch JobParameter  (0) 2020.05.26
Spring Batch 분기/decide  (0) 2020.05.26
Spring batch 기본 흐름 (tasklet, next flow)  (0) 2020.05.26