2017-01-11 31 views
1

응용 프로그램을 배포 할 때 작업 작성 중입니다. 이 작업은 매 5 분마다 실행되어야하며 즉시 시작되어야합니다. 그러나 문제는 배포 후 5 분이 시작되고 5 분마다 반복된다는 것입니다. 응용 프로그램을 배포 할 때 즉시 시작하는 데 필요한 변경 사항을 알려주십시오.웹 응용 프로그램을 배포 할 때 Cron 작업이 즉시 시작되도록 예약하십시오.

public void contextInitialized(ServletContextEvent servletContextEvent) { 
     logger.info("contextInitialized() ,Starting instantiating Processor Engine"); 
     try{ 
     JobDetail job = newJob(MyServiceProcessor.class).withIdentity(
       "CronQuartzJob", "Group").build(); 
     Trigger trigger = newTrigger().withIdentity("TriggerName", "Group").withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")).build(); 
     scheduler = new StdSchedulerFactory().getScheduler(); 
     scheduler.start(); 
     scheduler.scheduleJob(job, trigger); 

     } 
     catch (SchedulerException e) { 
      logger.error(", contextInitialized() ,Problem in starting Processor Engine"+e); 
    } 
+0

웹 응용 프로그램에 사용할 서버 및 프레임 워크는 무엇입니까 ?? – Poornima

+0

안녕하세요! 아래의 답변 중 하나가 문제를 해결하는 데 도움이 되었다면 받아 들인 것으로 표시하여 질문을 답변으로 표시하도록하십시오. – walen

답변

0

나는 그런 식으로 곧바로 작업을 시작할 수 없다고 생각합니다. cron-expression은 각각 0 또는 5 분을 트리거합니다.

JobExecutionContext가 필요없는 경우 작업을 추가로 인스턴스화하고 contextInitialized()에서 수동으로 실행할 수도 있습니다.

MyServiceProcessor mjob = new MyServiceProcessor(); 
mjob.execute(null); 
+0

' "0 또는 5 분마다 cron-expression이 트리거됩니다."'cron 구문이 아닌 방법입니다. 공장. '0/5'는 '분 0부터 시작하여 5 분마다'를 의미합니다. 게다가,'execute()'를 직접 호출하면 스케줄러를 오버라이드한다는 의미입니다 :'getCurrentlyExecutingJobs()'를 호출하면 제어가 겹치지 않고, 인터럽트도없고, 작업 추적도없고, 마지막 실행이나 경과 시간에 대한 정보도 없습니다 ... – walen

0

이러한 단순한 예약에는 CronTrigger을 사용하지 마십시오. 대신 SimpleTrigger를 사용

Trigger trigger = newTrigger() 
     .withIdentity("TriggerName", "Group") 
     .withSchedule(SimpleTriggerBuilder.simpleSchedule() 
        .withIntervalInMinutes(5) 
        .repeatForever()) 
     .build(); 

이는 5 분마다 지금 발사 작업을 예약하고 있습니다.

SimpleTrigger의 더 많은 용도로는 Quartz's tutorial on it을 읽을 수 있습니다.