Quartz 触发器未使用 JobStoreTX 触发

Quartz trigger is not firing with JobStoreTX

我正在用 Quartz 创建我的第一个计划任务。对于我的项目,我需要将数据存储在数据库中。

为了启动我使用的调度程序:

scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();

我创建了一个简单的作业来测试调度

package com.atlascopco.framework.schedule.jobs;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class StoredProcedureJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {


        System.out.println("test"); 

    }

}

在我的数据库中,我手动创建了一些记录。 JOB_DETAILS

SCHED_NAME  JOB_NAME    JOB_GROUP   DESCRIPTION JOB_CLASS_NAME  IS_DURABLE  IS_NONCONCURRENT    IS_UPDATE_DATA  REQUESTS_RECOVERY   JOB_DATA
test    test    test    test    com.atlascopco.framework.schedule.jobs.StoredProcedureJob   1   1   1   1   NULL

触发器

SCHED_NAME  TRIGGER_NAME    TRIGGER_GROUP   JOB_NAME    JOB_GROUP   DESCRIPTION NEXT_FIRE_TIME  PREV_FIRE_TIME  PRIORITY    TRIGGER_STATE   TRIGGER_TYPE    START_TIME  END_TIME    CALENDAR_NAME   MISFIRE_INSTR   JOB_DATA
test    test    test    test    test    test    1477559872000   NULL    NULL    WAITING SIMPLE  1477559872000   NULL    NULL    NULL    NULL

SIMPLE_TRIGGERS

SCHED_NAME  TRIGGER_NAME    TRIGGER_GROUP   REPEAT_COUNT    REPEAT_INTERVAL TIMES_TRIGGERED
test    test    test    10  1000    0

现在,当我启动我的应用程序时,调度程序就会启动。调度程序的日志定期添加新行(没有错误,只有调试消息)。我做错了什么开始工作?

而且当我在做的时候scheduler.getTriggerGroupNames()列表是空的。

找到了使用 QuartzAPI 将作业保存在数据库中的方法

JobDetail jobDetail = JobBuilder.newJob(StoredProcedureJob.class)
                    .withIdentity("dataJob", "dataJobGroup")
                    .storeDurably(true)
                    .requestRecovery(true)
                    .build();

            SimpleTrigger trigger = (SimpleTrigger) newTrigger()
                    .withIdentity("trigger1", "dataJobGroup")
                     .startNow()
                    .withSchedule(
                            simpleSchedule().withIntervalInSeconds(1)
                                    .repeatForever()).build();

            scheduler.scheduleJob(jobDetail, trigger);