2017-01-11 14 views
1

Я работаю над написанием задания при развертывании моего приложения. Это задание должно выполняться каждые 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 минут.

Альтернативно, вы можете создать экземпляр задания дополнительно и выполнить его вручную в контекстеInitialized(), если вам не нужен JobExecutionContext.

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

'' Cron-expression запускает каждые 0 или 5 минут. '' Это не так, как синтаксис cron работает. '0/5' означает« каждые пять минут, начиная с минуты ноль ». Кроме того, прямой вызов 'execute()' означает, что вы переопределяете Scheduler: не перекрывающийся элемент управления, не прерывание, отсутствие следа задания, если вы вызываете '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.