quarkusio/quarkus · error · IllegalArgumentException
Simple job {identity} configured with invalid misfire policy
Error message
Simple job {identity} configured with invalid misfire policy {policy}
Valid options are: {validSimpleValues} What it means
Symmetric to the cron case: a simple (interval/delayed) job's misfire policy must be one of the simple-trigger policies. If the configured policy is a CRON-only value (e.g. cron-trigger-do-nothing), `createTrigger` throws this IllegalArgumentException while building the simple schedule.
Source
Thrown at extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java:786
simpleScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
break;
case FIRE_NOW:
simpleScheduleBuilder.withMisfireHandlingInstructionFireNow();
break;
case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT:
simpleScheduleBuilder.withMisfireHandlingInstructionNowWithExistingCount();
break;
case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT:
simpleScheduleBuilder.withMisfireHandlingInstructionNowWithRemainingCount();
break;
case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_EXISTING_COUNT:
simpleScheduleBuilder.withMisfireHandlingInstructionNextWithExistingCount();
break;
case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_REMAINING_COUNT:
simpleScheduleBuilder.withMisfireHandlingInstructionNextWithRemainingCount();
break;
case CRON_TRIGGER_DO_NOTHING:
throw new IllegalArgumentException("Simple job " + identity
+ " configured with invalid misfire policy "
+ perJobConfig.misfirePolicy().dashedName() +
"\nValid options are: "
+ QuartzMisfirePolicy.validSimpleValues().stream()
.map(QuartzMisfirePolicy::dashedName)
.collect(Collectors.joining(", ")));
}
scheduleBuilder = simpleScheduleBuilder;
} else {
throw new IllegalArgumentException("Invalid schedule configuration: " + scheduled);
}
TriggerBuilder<?> triggerBuilder = TriggerBuilder.newTrigger()
.withIdentity(identity, Scheduler.class.getName())
.forJob(jobDetail)
.withSchedule(scheduleBuilder);
if (description != null) {
triggerBuilder.withDescription(description);View on GitHub (pinned to e1c734241f)
Solutions
- Set the policy to a simple-valid option (e.g. simple-trigger-reschedule-now-with-existing-repeat-count, simple-trigger-reschedule-next-with-remaining-count, simple-trigger-ignore-misfire-policy, simple-trigger-smart-policy, simple-trigger-schedule-1, simple-trigger-schedule-2...)
- Remove the misfire-policy entry to use the default smart policy
- Consult `QuartzMisfirePolicy.validSimpleValues()` for the exact dashed names
Example fix
// before quarkus.quartz.misfire-policy.myJob=cron-trigger-do-nothing // after quarkus.quartz.misfire-policy.myJob=simple-trigger-reschedule-next-with-existing-count
Defensive patterns
Strategy: validation
Validate before calling
boolean valid = QuartzMisfirePolicy.validSimpleValues().contains(configuredPolicy);
if (!valid) { throw new IllegalArgumentException("Policy " + configuredPolicy + " not valid for simple jobs"); } Prevention
- Validate application.properties values with a config test before deployment
- Never share misfire-policy keys between cron and interval jobs
- Rely on the default smart policy for simple jobs
When it happens
Trigger: Configuring `quarkus.quartz.misfire-policy.<job>` with a cron-only value (such as cron-trigger-do-nothing) for a job scheduled with `every=...` / simple schedule, then creating the trigger.
Common situations: Reusing a shared config file where the policy was written for a cron job; renaming a job's schedule from cron to interval without adjusting the policy; misunderstanding the allowed enum values.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Global cron trigger misfire policy configured with invalid o
- Global simple trigger misfire policy configured with invalid
- Cron job {identity} configured with invalid misfire policy {
- Clustered jobs configured with unsupported job store option
- Quartz datasource resolution can be either deferred to runti
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/051941fdeca96fef.
Report an issue: GitHub.