quarkusio/quarkus · error · IllegalArgumentException
Cron job {identity} configured with invalid misfire policy {
Error message
Cron job {identity} configured with invalid misfire policy {policy}
Valid options are: {validCronValues} What it means
Quarkus Quartz scheduler validates that the misfire policy configured for a cron job is one of the policies valid for cron triggers. If `quarkus.quartz.misfire-policy.<job>` (or the per-job config) names a policy that only applies to simple triggers (e.g. reschedule-now-with-remaining-repeat-count), `createTrigger` throws this IllegalArgumentException while building the cron trigger.
Source
Thrown at extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java:743
.getOrDefault(identity, runtimeConfig.cronTriggerConfig().misfirePolicyConfig());
switch (perJobConfig.misfirePolicy()) {
case SMART_POLICY:
// this is the default, doing nothing
break;
case IGNORE_MISFIRE_POLICY:
cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
break;
case FIRE_NOW:
cronScheduleBuilder.withMisfireHandlingInstructionFireAndProceed();
break;
case CRON_TRIGGER_DO_NOTHING:
cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();
break;
case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT:
case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT:
case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_EXISTING_COUNT:
case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_REMAINING_COUNT:
throw new IllegalArgumentException("Cron job " + identity
+ " configured with invalid misfire policy "
+ perJobConfig.misfirePolicy().dashedName() +
"\nValid options are: "
+ QuartzMisfirePolicy.validCronValues().stream()
.map(QuartzMisfirePolicy::dashedName)
.collect(Collectors.joining(", ")));
}
scheduleBuilder = cronScheduleBuilder;
} else if (!scheduled.every().isEmpty()) {
OptionalLong everyMillis = SchedulerUtils.parseEveryAsMillis(scheduled);
if (!everyMillis.isPresent()) {
return Optional.empty();
}
SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(everyMillis.getAsLong())
.repeatForever();
QuartzRuntimeConfig.QuartzMisfirePolicyConfig perJobConfig = runtimeConfig.misfirePolicyPerJobs()View on GitHub (pinned to e1c734241f)
Solutions
- Change the misfire policy for the cron job to a cron-valid option: cron-trigger-do-nothing, cron-trigger-fire-and-proceed, cron-trigger-fire-once-now, cron-trigger-ignore-misfire-cron, cron-trigger-smart-policy, or cron-trigger-schedule-1
- Remove the explicit misfire-policy config so the smart policy default applies
- Check `QuartzMisfirePolicy.validCronValues()` for the exact dashed names accepted
Example fix
// before (application.properties) quarkus.quartz.misfire-policy.myJob=simple-trigger-reschedule-now-with-remaining-repeat-count // after quarkus.quartz.misfire-policy.myJob=cron-trigger-fire-once-now
Defensive patterns
Strategy: validation
Validate before calling
boolean valid = QuartzMisfirePolicy.validCronValues().contains(configuredPolicy);
if (!valid) { throw new IllegalArgumentException("Policy " + configuredPolicy + " not valid for cron jobs"); } Prevention
- Keep misfire policy per schedule type, not in a shared config section
- Prefer the default smart policy unless a specific behavior is required
- Test job config at startup with a failing-fast profile test
When it happens
Trigger: Setting `quarkus.quartz.misfirePolicy` for a @Scheduled cron job to a SIMPLE-only value such as simple-trigger-reschedule-now-with-existing-repeat-count, then scheduling the job (createTrigger called via triggerBuilder).
Common situations: Copy-pasting a misfire policy from a simple-interval job to a cron job; typos in config causing a wrong enum; migration from simple to cron schedule without updating the misfire policy.
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
- Simple 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/8202439e8dfaf16f.
Report an issue: GitHub.