JobInstance already exists and is not restartable 오류 원인과 해결방법
Job이 중단되거나 실패했을 경우, 이를 재시작하려면 해당 JobInstance가 restartable 상태여야 합니다.
그렇지 않을 경우 위와 같은 오류가 발생합니다.
JobParameters jobParameters = new JobParametersBuilder()
.addString("uniqueKey", UUID.randomUUID().toString()) // 고유한 키 추가
.addDate("currentTime", new Date()) // 현재 시간 추가
.toJobParameters();
jobLauncher.run(job, jobParameters);
@Bean
public Job exampleJob(JobBuilderFactory jobBuilderFactory, Step step) {
return jobBuilderFactory.get("exampleJob")
.start(step)
.preventRestart(false) // 재시작 가능하도록 설정
.build();
}
SELECT * FROM BATCH_JOB_INSTANCE;
SELECT * FROM BATCH_JOB_EXECUTION WHERE JOB_INSTANCE_ID = <ID>;
DELETE FROM BATCH_JOB_EXECUTION WHERE JOB_INSTANCE_ID = <ID>;
DELETE FROM BATCH_JOB_INSTANCE WHERE JOB_INSTANCE_ID = <ID>;
JobInstance lastInstance = jobExplorer.getJobInstance("exampleJob", jobParameters);
if (lastInstance != null) {
System.out.println("Job already exists. Skipping execution.");
} else {
jobLauncher.run(job, jobParameters);
}
@Bean
public Job exampleJob(JobBuilderFactory jobBuilderFactory, Step step) {
return jobBuilderFactory.get("exampleJob")
.incrementer(new RunIdIncrementer()) // 매 실행마다 고유한 JobParameters 생성
.start(step)
.build();
}
운영 환경 사용 시 신중
run.id 파라미터 사용 의존성