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);
我正在用 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);