Как исправить неработающую работу Spring boot Quartz Cron Trigger Job

Создан простой источник приложения для весенней загрузки. Целью приложения является динамическое создание задания и запуск его с помощью триггера.

Я пытаюсь использовать выражение cron, но оно не работает.

Но простой триггер для запуска через 30 секунд, это работает.

Любой может помочь мне здесь с тем, что не так с источником приложения. Выложили копию в общедоступный репозиторий GitHub. Вы можете клонировать, нажав здесь.

Шаги по воспроизведению проблемы в файле readme, прикрепленном к исходному коду.

приложение.свойства

spring.quartz.job-store-type=memory
spring.quartz.properties.org.quartz.threadPool.threadCount=5

# logging level
#logging.level.org.springframework=ERROR
logging.level.com.example=DEBUG
logging.level.org.quartz=DEBUG

# output to a file
logging.file=app.log

# temp folder example
#logging.file=${java.io.tmpdir}/app.log

logging.pattern.file=%d %p %c{1.} [%t] %m%n

logging.pattern.console=%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

Рестконтроллер

package com.example.QuartzREST;

import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/api", produces = "application/hal+json")
public class QuartzRestResource {

    @Autowired private QartzRestService qartzRestService;

    @SneakyThrows
    @GetMapping("/schedule/cron/job/{id}")
    public String scheduleCronJob(@PathVariable("id") String id) {
        qartzRestService.scheduleJobWithCronTrigger(id,"0/5 0 0 ? * * *");
        return "OK";
    }

    @SneakyThrows
    @GetMapping("/schedule/simple/job/{id}")
    public String scheduleSimpleJob(@PathVariable("id") String id) {
        qartzRestService.scheduleJobWithSimpleTrigger(id);
        return "OK";
    }
}

QartzRestService

package com.example.QuartzREST;

import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.Date;

/**
 * @author  Ameya Shetti
 */
@Slf4j
@Service
public class QartzRestService {

    @Autowired private Scheduler scheduler;

    public void scheduleJobWithCronTrigger(String jobId, String cronExpresson) throws SchedulerException {
        JobDetail jobDetail = this.buildJobDetail(jobId);
        scheduler.scheduleJob(jobDetail,buildJobCronTrigger(jobId,jobDetail,cronExpresson));
        scheduler.start();
    }

    public void scheduleJobWithSimpleTrigger(String jobId) throws SchedulerException {
        JobDetail jobDetail = this.buildJobDetail(jobId);
        scheduler.scheduleJob(jobDetail,buildJobSimpleTrigger(jobId,jobDetail));
        scheduler.start();
    }

    private JobDetail buildJobDetail(String jobId) {
        JobDataMap jobDataMap = new JobDataMap();

        jobDataMap.put(QartzRestConstants.KEY_JOB_ID, jobId);

        return JobBuilder.newJob(QartzRestJob.class)
                .withIdentity(QartzRestConstants.BATCHJOB+jobId, QartzRestConstants.GROUP1)
                .usingJobData(jobDataMap)
                .storeDurably()
                .build();
    }

    private Trigger buildJobSimpleTrigger(String jobId, JobDetail jobDetail) {

        return TriggerBuilder.newTrigger()
                .withIdentity(QartzRestConstants.BATCH_TRIGGER+jobId, QartzRestConstants.GROUP1)
                .forJob(jobDetail)
                .startAt(Date.from(Instant.now().plusSeconds(30)))
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow())
                .build();
    }

    private Trigger buildJobCronTrigger(String jobId, JobDetail jobDetail, String cronExpression) {
        log.debug("cron expression used : {}",cronExpression);

        return TriggerBuilder.newTrigger()
                .withIdentity(QartzRestConstants.BATCH_TRIGGER+jobId, QartzRestConstants.GROUP1)
                .forJob(jobDetail)
                .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
                .build();
    }
}

person Ameya    schedule 27.02.2021    source источник