Skip to content

Commit 8ab547f

Browse files
authored
Merge pull request #519 from chrisdennis/issue-505
Fixes #505 [2.3.x]
2 parents 25c2cbd + b51abe9 commit 8ab547f

File tree

2 files changed

+60
-6
lines changed

2 files changed

+60
-6
lines changed

quartz-core/src/main/java/org/quartz/impl/triggers/CronTriggerImpl.java

+20-6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.quartz.Scheduler;
3232
import org.quartz.Trigger;
3333
import org.quartz.TriggerUtils;
34+
import org.slf4j.Logger;
35+
import org.slf4j.LoggerFactory;
3436

3537

3638
/**
@@ -62,6 +64,8 @@ public class CronTriggerImpl extends AbstractTrigger<CronTrigger> implements Cro
6264
*/
6365
private static final long serialVersionUID = -8644953146451592766L;
6466

67+
private static final Logger LOGGER = LoggerFactory.getLogger(CronTriggerImpl.class);
68+
6569
protected static final int YEAR_TO_GIVEUP_SCHEDULING_AT = CronExpression.MAX_YEAR;
6670

6771

@@ -813,12 +817,22 @@ public ScheduleBuilder<CronTrigger> getScheduleBuilder() {
813817

814818
CronScheduleBuilder cb = CronScheduleBuilder.cronSchedule(getCronExpression())
815819
.inTimeZone(getTimeZone());
816-
817-
switch(getMisfireInstruction()) {
818-
case MISFIRE_INSTRUCTION_DO_NOTHING : cb.withMisfireHandlingInstructionDoNothing();
819-
break;
820-
case MISFIRE_INSTRUCTION_FIRE_ONCE_NOW : cb.withMisfireHandlingInstructionFireAndProceed();
821-
break;
820+
821+
int misfireInstruction = getMisfireInstruction();
822+
switch(misfireInstruction) {
823+
case MISFIRE_INSTRUCTION_SMART_POLICY:
824+
break;
825+
case MISFIRE_INSTRUCTION_DO_NOTHING:
826+
cb.withMisfireHandlingInstructionDoNothing();
827+
break;
828+
case MISFIRE_INSTRUCTION_FIRE_ONCE_NOW:
829+
cb.withMisfireHandlingInstructionFireAndProceed();
830+
break;
831+
case MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY:
832+
cb.withMisfireHandlingInstructionIgnoreMisfires();
833+
break;
834+
default:
835+
LOGGER.warn("Unrecognized misfire policy {}. Derived builder will use the default cron trigger behavior (MISFIRE_INSTRUCTION_FIRE_ONCE_NOW)", misfireInstruction);
822836
}
823837

824838
return cb;

quartz-core/src/test/java/org/quartz/CronTriggerTest.java

+40
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919

2020
import org.quartz.impl.triggers.CronTriggerImpl;
2121

22+
import static java.util.Arrays.asList;
23+
import static org.hamcrest.MatcherAssert.assertThat;
24+
import static org.hamcrest.Matchers.is;
25+
2226
/**
2327
* Unit test for CronTrigger.
2428
*/
@@ -125,6 +129,42 @@ public void testMisfireInstructionValidity() throws ParseException {
125129
}
126130
}
127131

132+
public void testMisfireInstructionInDerivedBuilder() throws ParseException {
133+
for (int policy : asList(
134+
Trigger.MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY,
135+
Trigger.MISFIRE_INSTRUCTION_SMART_POLICY,
136+
CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING,
137+
CronTrigger.MISFIRE_INSTRUCTION_FIRE_ONCE_NOW)
138+
) {
139+
CronTriggerImpl trigger = new CronTriggerImpl();
140+
trigger.setCronExpression("0 0 12 * * ?");
141+
trigger.setMisfireInstruction(policy);
142+
assertThat(trigger.getMisfireInstruction(), is(policy));
143+
144+
CronTrigger copy = trigger.getTriggerBuilder().build();
145+
assertThat(copy.getMisfireInstruction(), is(policy));
146+
}
147+
}
148+
149+
public void testUndefinedMisfireInstructionInDerivedBuilder() throws ParseException {
150+
CronTriggerImpl trigger = new CronTriggerImpl() {
151+
@Override
152+
public int getMisfireInstruction() {
153+
return 12345;
154+
}
155+
};
156+
trigger.setCronExpression("0 0 12 * * ?");
157+
try {
158+
trigger.setMisfireInstruction(12345);
159+
fail("Expected IllegalArgumentException");
160+
} catch (IllegalArgumentException e) {
161+
assertThat(e.getMessage(), is("The misfire instruction code is invalid for this type of trigger."));
162+
}
163+
164+
CronTrigger copy = trigger.getTriggerBuilder().build();
165+
assertThat(copy.getMisfireInstruction(), is(Trigger.MISFIRE_INSTRUCTION_SMART_POLICY));
166+
}
167+
128168
// execute with version number to generate a new version's serialized form
129169
public static void main(String[] args) throws Exception {
130170
new CronTriggerTest().writeJobDataFile("2.0");

0 commit comments

Comments
 (0)