2013-03-13 46 views
1

我想写一个简单的程序,它在特定的日期时间运行相同的作业,输入文件中的日期时间列表,这里是我的代码:具有特定开始时间的石英单个作​​业多重触发器不起作用

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); 
Scheduler sched = schedFact.getScheduler(); 

sched.start(); 

Map<JobDetail, List<Trigger>> jobAndTriggers = new HashMap<JobDetail, List<Trigger>>(); 
List<Trigger> triggers = new ArrayList<Trigger>(); 
JobDetail jobDetail = newJob (TestJob.class) 
    .withIdentity(Constants.TEST_JOB_PREFIX, onstants.TEST_JOB_GRUOP_PREFIX) 
    .build(); 

Trigger trigger = null; 
int triggerIndex = 1; 

for (Date date : dates) { 
    trigger = newTrigger() 
     .withIdentity(Constants.SIMPLE_TRIGGER_PREFIX + triggerIndex, Constants.SIMPLE_TRIGGER_GROUP_PREFIX) 
     .startAt(date) 
     .withSchedule(simpleSchedule().withRepeatCount(0)) 
     .build(); 

    triggers.add(trigger); 
} 
jobAndTriggers.put(jobDetail, triggers); 

sched.scheduleJobs (jobAndTriggers, true); 

现在,当程序运行时,说当我通过之日起次类似的列表: 2013年3月13日12时21分33秒| 2013-03-13 12:21:37 | 2013-03-13 12:22:41 | 2013-03-13 12:22:45 | 2013-03-13 12:23:49 |

这项工作只会被解雇一次,这是最后一次的时间戳,我不知道我做错了什么,任何帮助表示赞赏。以下是一些程序日志:

12:19:33.265 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' 
12:19:33.265 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.1.7 
12:19:33.265 [main] INFO org.quartz.core.QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 
12:19:33.265 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - Triggers created: 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - SIMPLE_TRIGGER_GROUP.SIMPLE_TRIGGER1 which will fire job at 2013-03-13 12:21:33 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - SIMPLE_TRIGGER_GROUP.SIMPLE_TRIGGER1 which will fire job at 2013-03-13 12:21:37 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - SIMPLE_TRIGGER_GROUP.SIMPLE_TRIGGER1 which will fire job at 2013-03-13 12:22:41 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - SIMPLE_TRIGGER_GROUP.SIMPLE_TRIGGER1 which will fire job at 2013-03-13 12:22:45 
12:19:33.265 [main] DEBUG c.s.r.s.s.TriggerAndJobBuilder - SIMPLE_TRIGGER_GROUP.SIMPLE_TRIGGER1 which will fire job at 2013-03-13 12:23:49 
12:19:33.265 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers 
12:19:34.109 [Timer-0] DEBUG org.quartz.utils.UpdateChecker - Checking for available updated version of Quartz... 
12:19:34.265 [Timer-1] DEBUG org.quartz.utils.UpdateChecker - Checking for available updated version of Quartz... 
12:19:49.265 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'TEST_GROUP.TEST_PING_JOB', class=com.test.TestJob 
12:19:49.265 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 
12:23:49.265 [DefaultQuartzScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job TEST_GROUP.TEST_PING_JOB 
12:23:49.265 [DefaultQuartzScheduler_Worker-1] INFO c.s.r.s.s.TestJob - Entered TestJob execute method at 2013-03-13 12:23:49 
+0

问题修复。我忘了增加作为触发器标识符一部分的变量triggerIndex。所以基本上我分配了具有相同身份的“多个”触发器,并且Quartz用新设置覆盖“旧”触发器。 – Jiansen 2013-03-14 13:47:05

回答

0

也许你已经为所有触发器所以它是最后一个,实际上是被考虑分配相同的标识符。

triggerIndex = 1; 
`Constants.SIMPLE_TRIGGER_PREFIX + triggerIndex` 

将此更改为唯一的东西,并且您将在列表中发送的每个日期都会有不同的触发器。