Почему я не могу заставить QuartzScheduler запустить мою работу? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь запустить небольшое приложение QuartzScheduler с помощью cron-триггера.

Я думаю, что у меня установлены свойства basi c для запуска и запуска, и я вижу вывод журнала следующим образом:

Mar 27, 2020 12:11:16 PM scheduler.QuartzScheduler start
INFO: QuartzScheduler started...
Mar 27, 2020 12:11:16 PM org.quartz.impl.StdSchedulerFactory instantiate
INFO: Using default implementation for ThreadExecutor
Mar 27, 2020 12:11:16 PM org.quartz.core.SchedulerSignalerImpl <init>
INFO: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
Mar 27, 2020 12:11:16 PM org.quartz.core.QuartzScheduler <init>
INFO: Quartz Scheduler v.2.3.0 created.
Mar 27, 2020 12:11:16 PM org.quartz.simpl.RAMJobStore initialize
INFO: RAMJobStore initialized.
Mar 27, 2020 12:11:16 PM org.quartz.core.QuartzScheduler initialize
INFO: Scheduler meta-data: Quartz Scheduler (v2.3.0) 'QuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 1 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

Mar 27, 2020 12:11:16 PM org.quartz.impl.StdSchedulerFactory instantiate
INFO: Quartz scheduler 'QuartzScheduler' initialized from an externally provided properties instance.
Mar 27, 2020 12:11:16 PM org.quartz.impl.StdSchedulerFactory instantiate
INFO: Quartz scheduler version: 2.3.0
Mar 27, 2020 12:11:16 PM org.quartz.core.QuartzScheduler start
INFO: Scheduler QuartzScheduler_$_NON_CLUSTERED started.

Из того, что я вижу в журналах, кажется, планировщик запущен, хотя я не вижу ни одного оператора журнала, который есть в классе Job, который должен запускаться. В соответствии с руководством я следую, чтобы выходные данные журнала выглядели так, как ожидалось, но я не уверен, почему я не вижу информацию журнала для текущей выполняемой работы.

Мой класс QuartzScheduler:

public class QuartzScheduler {
    static Logger logger = LoggerFactory.getLogger(QuartzScheduler.class);

    private static final String TRIGGER_NAME = "fileCheckerTrigger";
    private static final String JOB_NAME = "fileCheckerJob";
    private static final String CRON_EXPRESSION = "0 30 16-21 ? * * *";
    private static final String DUM_CRON_EXP = "0 0/5 0 ? * * *";//every 5 minutes todo: remove when done testing

    private Scheduler scheduler;

    public void start() throws Exception {
        logger.info("QuartzScheduler started...");

        Properties p = new Properties();
        p.put("org.quartz.threadPool.threadCount", "1");
        p.put("org.quartz.jobStore.class", "org.quartz.simpl.RAMJobStore");

        //Scheduler class links both “Job” and “Trigger” together and executes it.
        StdSchedulerFactory factory = new StdSchedulerFactory(p);
        scheduler = factory.getScheduler();

        scheduleJob(buildCronSchedulerTrigger("cronGroup"), QuartzJob.class, "cronGroup");
        scheduler.start();
        //scheduler.shutdown();
    }

    private void scheduleJob(Trigger trigger, Class jobClass, String groupName) throws Exception {

        JobDetail job = JobBuilder.newJob(jobClass).withIdentity(JOB_NAME, groupName).build();
        scheduler.scheduleJob(job, trigger);
    }

    private Trigger buildCronSchedulerTrigger(String groupName) {
        return TriggerBuilder
                .newTrigger().withIdentity(TRIGGER_NAME, groupName)
                .withSchedule(CronScheduleBuilder
                        .cronSchedule(DUM_CRON_EXP))
                .build();
    }
}

Мой класс QuartzJob:

public class QuartzJob implements Job {
    Logger logger = LoggerFactory.getLogger(QuartzJob.class);

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info(" File checking task initiated. ");
    }
}

Мой класс приложения с main:

public class FileWatcherApp {
    public static void main(String[] args) throws Exception {
        QuartzScheduler scheduler = new QuartzScheduler();
        scheduler.start();
    }
}

Я ожидаю увидеть Инициированная задача проверки файла в журнале но не добились успеха в этом. Я использую временное выражение cron, которое должно запускать задание каждые 5 минут ...

Надеюсь, кто-нибудь увидит, что я делаю неправильно или не понимаю.

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