IT/Spring Framework

Spring Batch 작성중 (processor)

음료요정 2023. 4. 20. 16:49

 

스프링 배치란?

엔터프라이즈 시스템의 일상적인 운영에 필수적인 스프링 배치란 배치 프레임워크로 로깅/추적, 트랜잭션의 관리, 작업 처리 통계, 작업의 재시작, 건너뛰기, 리소스 관리 등의 대용량 레코드 처리에 유용한 기능을 제공한다. 

 

 

 

스프링 배치의 구조 

  설명
Job Spring Batch에서 배치 어플리케이션을 위한 일련의 프로세스로 단일 실행단위이다.
Step Job을 구성하는 처리 단위이다. 하나의 Job은 N개의 Step을 포함한다.
JobLauncher Job 실행을 위한 인터페이스이다. 
ItemReader Step에서 Item을 읽어오는 인터페이스이다. 다양한 방법으로 Item을 읽어 올 수 있다.
ItemProcssor Reader에서 읽어온 Item의 데이터를 처리하는 역할을 한다. 배치 처리의 필수 요소는 아니며 Reader, Writer, Processor처리를 분리하여 각각 역할을 나누어 구분하고 있다. 
ItemWriter 처리된 Data를 Writer할 때 사용한다. Insert, update, send 될 수 있다. 다양한 인터페이스가 존재한다
JobRepository Job과 Step의 상태를 관리하는 시스템이다. Spring Batch에서 지정된 테이블 스키마를 기반으로 데이터베이스에 유지가 된다. 

- 데이터베이스에 생성되는 테이블 명 
 BATCH_JOB_EXECUTION
 BATCH_JOB_EXECUTION_CONTEXT
 BATCH_JOB_EXECUTION_PARAMS
 BATCH_JOB_INSTANCE
 BATCH_STEP_EXECUTION
 BATCH_STEP_EXECUTION_CONTEXT

 

스프링배치 프로세스

 

스프링 배치 설정 방법 

1. dependency추가

  spring-boot-starter-batch 의존성을 추가한다. 

	compile("org.springframework.boot:spring-boot-starter-batch")

 

2. application.yml 에 스프링배치 관련 프로퍼티 설정을 한다.

# spring batch job
spring:
  batch:
   job:
    enabled: true
    names : testJob

 

3. 배치기능 활성화

Application 클래스에 @EnableBatchProcessing 추가 

@EnableBatchProcessing
@SpringBootApplication
public class BatchApplication extends SpringBootServletInitializer {
	public static void main(String[] args) {
		SpringApplication.run(BatchApplication.class, args);
	}
}

 

 

4. Batch Config 생성

job과 step 

@Configuration  
@EnableBatchProcessing  
@RequiredArgsConstructor  
public class TestComponent {  

	private final JobBuilderFactory jobBuilderFactory;  
	private final StepBuilderFactory stepBuilderFactory;  

	//job 생성
	@Bean
   	public Job testJob(){
    	return this.jobBuilderFactory.get()
            .start(firstStep())
            .next(secondStep())
            .next(lastStep())
            .end()
            .build();
    }
    
 	//step생성
	 public Step firstStep(){  
		 return stepBuilderFactory.get("startTasklet")  
			 .tasklet((contribution, chunkContext) -> {  
				 System.out.println("step1");  
				 return RepeatStatus.FINISHED;  
			 }) .build();  
	 }
     
     //tasklet 
     
     
     
      
}

Job builder로 step의 병렬화, 선언적 flow제어, flow 정의 외부화 같은 요소들이 설정 가능하다. 

 

 

 

5. 서비스단 로직 작성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@JobScope, @StepScope