2011-08-17 3 views
2

저는 하루 중 특정 시간대에 예약해야하는 스프링 배치 작업이 있습니다. 이 작업을 수행하기 위해 Quartz CRON 스케줄러를 설정했습니다. 그러나 나는 그 일이 한 번만 시작되는 것을 보았다.석영 CRON은 한 번만 작업을 트리거합니다

무엇이 잘못 될 수 있습니까?

<batch:job id="getFleetUpdatesJob" job-repository="jobRepository"> 
     <batch:step id="step0"> 
       <batch:tasklet ref="fleetUpdatesID" transaction-manager="jobRepository-transactionManager" /> 
     </batch:step>   
     <!-- <batch:step id="step1" next="step2"> 
       <batch:tasklet ref="world" transaction-manager="jobRepository-transactionManager" /> 
     </batch:step> -->  
    </batch:job>  

    <!-- Quartz related beans START --> 

    <bean name="updateDataFeedJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"> 
     <property name="jobClass" value="<package>.schedule.UpdateDataFeedJob" /> 
    </bean> 

    <bean id="cronTriggerId" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
     <property name="jobDetail" ref="updateDataFeedJobDetail" /> 
     <!-- run every morning at 3AM --> 
     <!-- <property name="cronExpression" value="0 0 3 * * ?" /> --> 

     <!-- run the job at 8pm everyday --> 
     <property name="cronExpression" value="0 0 20 * * ?" /> 
    </bean> 

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <ref bean="cronTriggerId" /> 
      </list> 
     </property> 
    </bean> 
    <!-- Quartz related beans END --> 
+4

매분마다 트리거되는 cron 표현식으로 테스트하려고 했으므로 (작동 여부를 확인하기 위해 24 시간을 기다릴 필요가없는 경우)? –

+0

예. 사실 테스트를 위해 나는 0/5 분으로 구성했습니다. 그러나 같은 문제. 그것은 한 번만 실행됩니다. –

답변

0

나는 cron 표현식이 올바르게 작동하고 있다고 생각하지만, 스프링 배치 작업은 매개 변수가 변경되지 않는 한 한 번만 실행됩니다. 다음과 유사한 스택 추적을받을 경우

이 작업을 확인할 수 있습니다

2011-08-18 00:40:26,155 INFO [org.springframework.batch.core.launch.support.SimpleJobLauncher] - <Job: [FlowJob: [name=job1]] completed with the following parameters: [{run.id=1}] and the following status: [COMPLETED]> 
2011-08-18 00:40:30,002 INFO [com.beny23.test.JobLauncherDetails] - <Quartz trigger firing with Spring Batch jobName=job1> 
2011-08-18 00:40:30,015 ERROR [com.beny23.test.JobLauncherDetails] - <Could not execute job.> 
org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for parameters={run.id=1}. If you want to run this job again, change the parameters. 
    at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:122) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 

이 같은 작업을 호출하려면, 당신은 UpdateDataFeedJob 클래스를 수정할 수 있습니다 각 작업 invokation에 대한 매개 변수가 다르다는 것을 보장하기 위해 :

JobParametersBuilder builder = new JobParametersBuilder(); 
builder.addLong("run.ts", System.currentTimeMillis()); 
JobParameters jobParameters = builder.toJobParameters(); 

Job job = jobLocator.getJob(jobName); 
jobLauncher.run(job, jobParameters); 
0

나는 봄 지금 해달라고하지만 난 석영 .I이 문제는 expression.You 0 0 3와 같은 단일 크론 표현을 부여해야 두 크론을주고있다,라고 생각합니다 사용 - 다음

XML 파일 조각입니다 -20 * *? (그런 식으로) crontrigger는 3과 20에서 실행되는 cron 표현식을 하나만 cron 표현식으로 다시 작성할 수 있습니다.

+0

다른 cron expr이 주석 처리되었습니다. –

관련 문제