나는이 문제를 며칠간 풀려고했으나 만들 수 없었다. 저는 Spring 4에서 새로운 것이므로 경험이있는 사람이 저에게 어떻게하는지 알려줄 수 있습니다.Spring 4 일정 잡기 실행시 반복적 인 일괄 처리 서비스
프레임 워크의 최신 버전으로 스프링 배치를 코딩하는 방법을 배우려고했습니다. 시작 튜토리얼을 따랐습니다. https://spring.io/guides/gs/batch-processing/
작업이 실행되면 주기적으로 실행하고 싶습니다. 따라서 예약 된 작업에갔습니다. https://spring.io/guides/gs/scheduling-tasks/
두 아이디어를 모두 정리하는 것이 쉬워 보입니다. 실제로는 불가능했습니다. 조금씩 읽었고 매번 jobExecution을 고유하게 만들기위한 코드를 추가했습니다. 여전히 코드 단계는 일단 완료되면 다시 실행되지 않습니다.
조금만 조사해 보았습니다. RepeatTemplate에 대해 읽었지 만 코드에 맞게 만드는 방법이 명확하지 않습니다. 여기에는 실행을위한 3 가지 관련 방법이 있습니다.
@Scheduled(cron="0 0/2 * * * ?")
public void run() throws Exception {
System.out.println("Job Started at :" + new Date());
JobParameters param = new JobParametersBuilder().addString("newsSyncJob",
String.valueOf(System.currentTimeMillis())).toJobParameters();
NewsJobCompletionListener listener = new NewsJobCompletionListener();
JobExecution execution = jobLauncher.run(newsSyncJob(listener), param);
System.out.println("Job finished with status :" + execution.getStatus());
}
/**
* Execution of the job
* @param listener
* @return
*/
@Bean
public Job newsSyncJob(NewsJobCompletionListener listener) {
log.debug("newsSyncJob execution started");
this.init();
return jobBuilderFactory.get("newsSyncJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1())
.end()
.build();
}
@Bean
protected Step step1() {
return stepBuilderFactory.get("step1")
.<NewsSync, NewsSync> chunk(4)
.reader(filesReader()).
processor(newsProcessor()).
writer(stateWriter()).
build();
}
모든 단계를 성공적으로 단계를 다시 실행하는 방법은 무엇입니까? 미리 감사드립니다.
처음에는 설정에 결함이 있습니다. 작업 인스턴스를 실행할 때마다 새 Job 인스턴스를 작성하지 않아야합니다. 또한 다시 실행하지 않는다는 것은 무엇을 의미합니까? 나는 또한 당신이 필요로하거나'flow'를 원하지만, 대신에'start'를 가져야한다고 생각합니다. –
감사합니다. @ M.Deinum의 의견입니다. 나는 당신이 제안한 Job Set을 'flow (...)'대신'start (...)'로 바꾸었고'end()'를 없애야했다. 그래도 작업은 한 번만 실행됩니다. run() 메서드는 매 2 분마다 실행된다는 것을 의미합니다 (cron 표현식에서 말함). 여기 좋았어. 문제는 줄에 ... 'jobLauncher.run (newsSyncJob (listener), param)' ... 'newsSyncJob (...)'이 다시 호출되지 않기 때문에. 그게 정상인가요? 'newsSyncJob()', 'step1()'또는 itemReader, 프로세서 또는 작성기에 대한 중단 점이 없습니다. –