2017-01-11 43 views
1

我正在部署應用程序時正在編寫作業。這份工作應該每5分鐘運行一次,它應該立即開始。但問題是它在部署之後5分鐘開始,每5分鐘重複一次。請在部署應用程序時幫助我進行必要的更改以立即啓動它。安排一個Cron作業,以便在部署Web應用程序時立即啓動

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

你正在使用哪個服務器和框架進行web應用? – Poornima

+0

嗨!如果下面的答案之一幫助你解決了你的問題,請記住將它標記爲已接受,所以你的問題顯示爲已回答,謝謝:) – walen

回答

0

我覺得你不能馬上開始工作。 cron-expression每觸發0或5分鐘。

另一種方法是,您可以額外實例化該作業,並在contextInitialized()中手動執行它,如果您不需要JobExecutionContext。

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

'「cron-expression觸發每個0或5分鐘」'這不是cron語法作品。 「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

相關問題