Кварцевый планировщик не запускает задание cron - PullRequest
0 голосов
/ 06 апреля 2010

Привет! Я использую Quartz scheduler для запуска cron, который должен выполнять множество действий. Мой код для того же - следующий:

В методе init () моего класса InitServlet я определяю свой TimerServer

    public class InitServlet extends HttpServlet {
      public void init(ServletConfig config) throws ServletException {
         try {
            System.out.println("Starting the CRON");
            //Set the DSO Handler CRON
            TimerServer task = TimerServer.getInstance();
            task.setTask();
        }  catch (Exception ex) {
            System.out.println("Failed to start the cron");
            ex.printStackTrace();
        }
    }

В моем классе TimerServer у меня есть следующие методы

    public void setTask() {
        try{            
            this.setSubscriptionDailyJob();
        } catch(SchedulerException ex) {
            log.error("SchedulerException: "+ex.getMessage(), ex);
        }

private void setSubscriptionDailyJob() throws SchedulerException {
       log.info("Step 1 ");

       Scheduler scheduler = schedulerFactory.getScheduler();
       log.info("Step 2 ");

        JobDetail subscriptionJob = new JobDetail("subscription", "subscriptiongroup",           SubscriptionDaily.class);
 log.info("Step 3 ");
        // Initiate CronTrigger with its name and group name
        CronTrigger subscriptionCronTrigger = new CronTrigger("subscriptionCronTrigger", "subscriptionTriggerGroup");

        try {
            log.info("Subscription cron: "+Constants.SUBSCRIPTION_CRON);
            // setup CronExpression
            CronExpression cexp = new CronExpression(Constants.SUBSCRIPTION_CRON);
            // Assign the CronExpression to CronTrigger
           subscriptionCronTrigger.setCronExpression(cexp);
        } catch (Exception ex) {
            log.warn("Exception: "+ex.getMessage(), ex);
        }
        scheduler.scheduleJob(subscriptionJob, subscriptionCronTrigger);    
        scheduler.start();
    }

В моем классе SubscriptionDaily:

public class SubscriptionDaily implements Job {    
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
      //Actions to be performed
    }
}

Теперь, проверяя мои логи, я получаю Шаг 1, Шаг 2, но не дальше.

Мой код застревает в самом классе TimerServer. Журналы по отношению к планировщику:

17:24:43 INFO  [TimerServer]: Step 1       
17:24:43 INFO  [SimpleThreadPool]: Job execution threads will use class loader of thread: http-8080-1     
17:24:43 INFO  [SchedulerSignalerImpl]: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl                                              
17:24:43 INFO  [QuartzScheduler]: Quartz Scheduler v.1.6.5 created.   
17:24:43 INFO  [RAMJobStore]: RAMJobStore initialized.                             
17:24:43 INFO  [StdSchedulerFactory]: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'  
17:24:43 INFO  [StdSchedulerFactory]: Quartz scheduler version: 1.6.5               17:24:43 INFO  [TimerServer]: Step 2

Я думаю, что запись в журнале отсутствует: [QuartzScheduler]: планировщик по умолчаниюQuartzScheduler _ $ _ NON_CLUSTERED запущен.

Пожалуйста, помогите.

1 Ответ

1 голос
/ 06 апреля 2010

Я не включил jar для общих коллекций в мою библиотеку, хотя из-за этого нигде в моем приложении не возникало никаких ошибок или исключений. Так что я в растерянности !!

Я никогда не видел, чтобы Java была такой тупой до этого. Это правильное поведение Java или я ожидаю от него слишком многого?

Я также использую Spring в своем приложении, и Spring предоставляет хороший и простой способ обработки функций TimerTask в Quartz и Java с помощью bean-компонентов. Несколько хороших и элегантных уроков: http://static.springsource.org/spring/docs/1.2.9/reference/scheduling.html http://www.javaranch.com/journal/200711/combining_spring_and_quartz.html

Несмотря на то, что при использовании бин-подхода есть ограничение, вы должны жестко закодировать значения cron в весеннем XML-файле, и мы потеряем гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...