0

I want to execute only 5 jobs at the same time. And if the job can't start due of lacking of free threads, I want it to start when the free thread will appear, and only one time. This is my code:

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory("quartz.properties");
sched = schedFact.getScheduler();
sched.start();
String jobName = generateJobDetailName();
JobDetail jobDetail = new JobDetail(jobName, GRP_Immediate, MyJob.class);
jobDetail.getJobDataMap().put(MyJob.DATA, data);
Trigger trigger = TriggerUtils.makeImmediateTrigger(0, 0);
trigger.setName(jobName + "_Simpletrigger");
sched.scheduleJob(jobDetail, trigger);

And this is my quartz.properties file:

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5

But there is something I can't understand. What kind of misfire instruction I need to set for required behavior?

Ksenia
  • 3,453
  • 7
  • 31
  • 63

1 Answers1

1

You should use SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW (note that your Trigger is a SimpleTrigger):

trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);

since you have a 'one-shot' trigger that should be executed exactly ones as early as possible.

mam10eks
  • 986
  • 7
  • 16