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

  1. 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...)
  2. Remove the misfire-policy entry to use the default smart policy
  3. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/051941fdeca96fef. Report an issue: GitHub.