[Batch] Spring batch Job API 호출
2024. 6. 27. 17:54ㆍSpring
Spring batch 서버에서 Job을 API로 호출하는 방법을 정리했습니다.
사용범위
- 환경 별 API 호출을 통한 통합 테스트
- 대부분 배치서버는 외부 호출을 막고 있기 때문에 로컬테스트 용도로 사용
- 외부호출이 가능하거나 인스턴스 접근이 가능하면 curl 등으로 호출
Config 구성
- Job parameter
- JobBuilderFactory
- JobMemberExecutionListener
- JobExecutionListener 구현체를 만들어 사용해야한다.
- JobParameterIncrement
- API 호출 시 회원별 분기 처리
- 같은 회원 중복 호출 시 고유값이 중복으로 들어오면 에러발생
- 같은 파라미터로 배치를 중복생성 할 수 없음
- Step
@Slf4j
@RequiredArgsConstructor
@Configuration
public class memberBatchConfig extends CommonAggregateConfig {
public static final String JOB_NAME = "memberTestBatch";
public static final String JOB_NAME_KR = "회원 테스트 배치";
private static final int CHUNK_SIZE = 1000;
private static final int FETCH_SIZE = 100;
@Autowired
protected JobBuilderFactory jobBuilderFactory;
@Autowired
protected StepBuilderFactory stepBuilderFactory;
@Qualifier("testEntityManagerFactory")
@Autowired
protected EntityManagerFactory entityManagerFactory;
@Bean(JOB_NAME)
public Job memberBatchJob(JobBuilderFactory jobBuilderFactory, JobMemberExecutionListener jobExecutionListener,
JobParameterIncrement jobParameterIncrement, @Qualifier(JOB_NAME + "Step") Step step) {
return jobBuilderFactory.get(JOB_NAME)
.incrementer(jobParameterIncrement)
.start(step)
.build();
}
@Bean(JOB_NAME + "Step")
@JobScope
public Step memberBatchStep(StepBuilderFactory stepBuilderFactory){
return stepBuilderFactory.get(JOB_NAME.concat("-STEP"))
.<Member, Member>chunk(CHUNK_SIZE)
.reader(reader())
.writer(writer())
.build();
}
@Bean(JOB_NAME + "-Step-Reader")
@StepScope
public ItemReader<Member> reader() {
// reader()
}
@Bean(JOB_NAME + "-Step-Writer")
@StepScope
public ItemWriter<Member> writer() {
// writer()
}
}
Controller
@Slf4j
@RestController
@RequestMapping(value = "/batch/member/test")
public class MemberLaunchController {
@Autowired
private JobLauncher jobLauncher;
@Autowired
@Qualifier("memberTestBatch") //Job name
private Job memberJob;
@GetMapping("/launch")
@ResponseStatus(HttpStatus.OK)
public Void jobLauncher() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
jobLauncher.run(memberJob, new JobParametersBuilder()
.addString("jobNameKr", MemberConfig.JOB_NAME_KR)
.addString("timestamp", LocalDateTime.now().toString()) // 유니크한 파라미터 추가, 중복 실행을 위함
.addString("회원id 및 번호")
.toJobParameters());
return;
}
}
'Spring' 카테고리의 다른 글
[SpringBoot] Cache(캐시) (0) | 2024.07.19 |
---|---|
[SpringBoot] SSE(Server Sent Event) (0) | 2024.07.18 |
[Spring] Kafka consumer multiple group 설정 (0) | 2024.06.20 |
[IntelliJ] 사용중인 Port 프로세스 종료 (0) | 2024.06.19 |
[SpringBoot] 테스트 환경 구축 - MockUser (0) | 2024.04.09 |