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

코린코린님의 프로필 이미지
코린코린

작성한 질문수

스프링 배치

JobExplorer / JobRegistry / JobOperator

RunIdIdIncrementer가 잘 동작하지 않는 것 같습니다.

작성

·

309

0

안녕하세요!
항상 좋은 강의 감사드립니다
 
이번에 강의 보면서 따라하고 있는데, RunIdIncremenet가 정상적으로 동작하지 않는 것 같아 문의 드리려고 글을 적었습니다
 
제가 이해하고 있기로는 RunIdIncrementer가 JobParameters를 항상 변화해서 공급해줘서 매번 JobInstance를 생성해 JobExecution을 실행할 수 있도록 도움을 주는 것으로 알고 있습니다.
 
지금까지 강의 들으면서 실제 복습하면서도 RunIdincremeneter는 정상적으로 작동했었구요. 그런데 이번에 Controller를 따서 Job을 실행하는 시점에는 runIdIncrementer()가 정상적으로 실행이 되지 않는 것 같습니다.
 
첫 자동 시작에서는 runIdIncremeneter()가 동작했으나, HTTP 요청하는 시점에서는 runIdIncremeneter()가 동작하지 않아 이미 존재하는 JobInstacne 예외 발생하며, DB에서도 runid가 생성되지 않습니다.
 
원래 RunIdIncremeneter는 http 요청에 대해서는 동작하지 않는 것일까요?
 
아래에 필요한 코드와 DB 값을 공유드립니다.
db값을 보면 가장 오른쪽에 있는 68은 자동으로 실행된 잡이고, 다시 HTTP 요청을 했을 때 실행되는 잡이 69번입니다. 69번을 실행시켰을 때 예외가 발생되어 Body에 다른 값을 전달해서 실행을 시켰습니다. 이 때 보시면 run.id라는 값이 생성되지 않은 것이 확인이 됩니다.
 
 
 
 
@Bean
public Job jobOperationJob() {
return jobBuilderFactory.get("jobOperationJob")
.incrementer(new RunIdIncrementer())
.start(step1())
.next(step2())
.build();
}


 
 
@PostMapping("/batch/start")
public String start(@RequestBody JobInfo jobInfo) throws NoSuchJobException, JobInstanceAlreadyExistsException, JobParametersInvalidException, InterruptedException {
// jobName jobRegistry에서 구할 수 있음.
Collection<String> jobNames = jobRegistry.getJobNames();

for (String jobName : jobNames) {
SimpleJob job = (SimpleJob) jobRegistry.getJob(jobName); // SimpleJob으로 다운 캐스팅
System.out.println("jobName : " + jobName);
jobOperator.start(job.getName(), "id=" + jobInfo.getId());
}

return "batch is started";
}
 
'
 
 
 

답변 1

0

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

네.

해당 질문과 관련해서는 아래와 비슷한 상황인 것 같습니다.

 https://www.inflearn.com/questions/346649

참고해 주시기 바랍니다

코린코린님의 프로필 이미지
코린코린

작성한 질문수

질문하기