пружинный загрузчик кварцевый планировщик - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть задание, которое должно выполняться каждую минуту дня, и пользователь может запустить его в течение дня через интерфейс.

Поэтому я работаю с Quartz Scheduler, чтобы сохранить свою работу в JobDataMap.

@Service
public class MyJob {
    private static final String TRIGGER_NAME = "myTriggerCronScheduleEveryMinute";
    private static final String JOB_NAME = "jobRunner";
    private static final String JOB_GROUPE = "groupRunnerJob";
    private static final Logger LOGGER = LoggerFactory.getLogger(JobHoliday.class);

    private Scheduler sched;

    @EventListener(ApplicationReadyEvent.class)
    public void registredJobOnTheSchedulerAfterApplicationReadyToServiceRequest() throws SchedulerException {
        JobDetail job = newJob(SampleJob.class).withIdentity(JOB_NAME, JOB_GROUPE).storeDurably(true)
                .requestRecovery(true).build();

        Trigger trigger = newTrigger().withIdentity(TRIGGER_NAME, JOB_GROUPE)
                .withSchedule(CronScheduleBuilder.cronSchedule(" 0 0/1 * 1/1 * ? *")).build();
        SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

        try {
            sched = schedFact.getScheduler();
        } catch (SchedulerException e) {

            LOGGER.info("SchedulerException is thrown after get the scheduler");
            throw e;
        }
        try {
            sched.start();
        } catch (SchedulerException e) {
            LOGGER.info("SchedulerException is thrown after start a job");
            throw e;
        }

        try {
            sched.scheduleJob(job, trigger);
        } catch (SchedulerException e) {
            LOGGER.info("SchedulerException is thrown after schedule a job");
            throw e;

        }

    }

}

Затем я создаю другой класс, который также расширяет QuartzJobBean для реализации метода executeInternal.

@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {

    Scheduler scheduler;
    LOGGER.info("holiday job");
    try {
        try {
            scheduler = new StdSchedulerFactory().getScheduler();
            for (String groupName : scheduler.getJobGroupNames()) {
                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                    if ("jobRunner".equals(jobKey.getName())) {
                        System.out.println("it's run");

                    } else {
                        System.out.println("it's not runing");
                    }
                }
            }
        } catch (SchedulerException e) {
            e.printStackTrace();
        }


    } catch (Exception e) {
        LOGGER.info("Failed run Job holiday ", e);
        throw new JobExecutionException(e);
    }
    LOGGER.info("Success run Job holiday");
}

Когда я запускаю приложение, оно не запускает задание, и это сбивает с толку, потому что когдаЯ создаю задание с минимальными инструкциями:

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("sample job");
}

Появится «пример задания».

Мой вопрос: почему такое поведение?Почему он показывает «рабочий пример» в одном классе, а не в другом?

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