인프런 커뮤니티 질문&답변

dukbabo님의 프로필 이미지
dukbabo

작성한 질문수

스프링 배치

DB - JdbcPagingItemReader

청크프로세스 조건별로 끝내는 방법

작성

·

171

0

안녕하세요

tasket이 아니고

청크프로세스로 테스트를 하고있는데

해당일이 휴일이면 배치를 실행안되게끔하려고 하는데

구현 방법이 있는지요?

제일 처음 일자는 입력받고 일자가 휴일이면 그냥 종료하고

휴일이 아니면 배치를 실행시키려고 합니다.

 

아니면 그냥 system.exit를 해도 되는지 궁금합니다.

정상종료 시키려합니다.

 

휴일이면 system.exit 이렇게 할수있는

명령어가 있는지요?

 

job/ step/ reader 소스 첨가 합니다.

@Bean

public Job job() throws Exception {

return jobBuilderFactory.get(JOB_NAME)

.incrementer(new RunIdIncrementer())

.listener(new JobResponseListener())

.start(autoBillPayResponseStep())

.build();

}

위는 잡이고

아래는 아이템 리더인데요 ^^

휴일인경우에는 그냥 완료 시키고 싶어요 ^^

 

@Bean

@JobScope

public Step autoBillPayResponseStep() throws Exception {

// TODO Auto-generated method stub

return stepBuilderFactory.get("autoBillResponseStep")

.<AutoBillPayResponseDto, Future<AutoBillPayResponseDto>>chunk(CHUNK_SIZE)

.reader(listItemReader(null,null,null))

.processor(asyncItemProcessor(null))

.writer(asyncItemWriter(null))

.build();

}

 

@Bean

@StepScope

public ListItemReader<AutoBillPayResponseDto> listItemReader(AutoBillPayResponseDao autoBillPayResponseDao, @Value("#{jobParameters[toDate]}") String toDate, @Value("#{jobParameters[guBun]}") String guBun) {

// TODO Auto-generated method stub

String baseDay = autoBillPayResponseDao.findByPreWorkDay(toDate);

List<AutoBillPayResponseDto> autoBillPayResponseDto = autoBillPayResponseDao.findBillPayResponse(baseDay, guBun);

return new ListItemReader<>(autoBillPayResponseDto);

}

 

답변 1

1

정수원님의 프로필 이미지
정수원
지식공유자

휴일일 경우에 배치을 실행시키지 않을려면 말 그대로 배치를 실행시키지 않도록 스킵해야 하는데 스프링 부트 배치는 job 을 자동 실행시키기 때문에 조건에 따른 분기를 하기 어렵습니다

그래서 main 혹은 ApplicationRunner 같은 곳에서 스프링 부트가 초기화 될 때 직접 JobLauncher 로 배치를 실행시키는 구문을 작성해야 할 것 같습니다

 

if 휴일이면

배치실행 안함

else

JobLauncher.run(job, jobparameters)

같이 입니다

그리고 배치를 실행하지 않으면 main 함수가 종료하기 때문에 자동으로 어플리케이션이 종료되므로 system.exit() 할 필요는 없습니다

 

참고로 도메인이해 강의에 있는 JobLauncher 챕터와 실전어플리케이션 개발의 맨마지막 챕터를  참고하시기 바랍니다

dukbabo님의 프로필 이미지
dukbabo

작성한 질문수

질문하기