{"record":{"id":"8202439e8dfaf16f","repo":"quarkusio/quarkus","slug":"cron-job-identity-configured-with-invalid-misfir","errorCode":null,"errorMessage":"Cron job {identity} configured with invalid misfire policy {policy}\nValid options are: {validCronValues}","messagePattern":"Cron job (.+?) configured with invalid misfire policy (.+?)\nValid options are: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java","lineNumber":743,"sourceCode":"                    .getOrDefault(identity, runtimeConfig.cronTriggerConfig().misfirePolicyConfig());\n            switch (perJobConfig.misfirePolicy()) {\n                case SMART_POLICY:\n                    // this is the default, doing nothing\n                    break;\n                case IGNORE_MISFIRE_POLICY:\n                    cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();\n                    break;\n                case FIRE_NOW:\n                    cronScheduleBuilder.withMisfireHandlingInstructionFireAndProceed();\n                    break;\n                case CRON_TRIGGER_DO_NOTHING:\n                    cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();\n                    break;\n                case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT:\n                case SIMPLE_TRIGGER_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT:\n                case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_EXISTING_COUNT:\n                case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_REMAINING_COUNT:\n                    throw new IllegalArgumentException(\"Cron job \" + identity\n                            + \" configured with invalid misfire policy \"\n                            + perJobConfig.misfirePolicy().dashedName() +\n                            \"\\nValid options are: \"\n                            + QuartzMisfirePolicy.validCronValues().stream()\n                                    .map(QuartzMisfirePolicy::dashedName)\n                                    .collect(Collectors.joining(\", \")));\n            }\n\n            scheduleBuilder = cronScheduleBuilder;\n        } else if (!scheduled.every().isEmpty()) {\n            OptionalLong everyMillis = SchedulerUtils.parseEveryAsMillis(scheduled);\n            if (!everyMillis.isPresent()) {\n                return Optional.empty();\n            }\n            SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule()\n                    .withIntervalInMilliseconds(everyMillis.getAsLong())\n                    .repeatForever();\n            QuartzRuntimeConfig.QuartzMisfirePolicyConfig perJobConfig = runtimeConfig.misfirePolicyPerJobs()","sourceCodeStart":725,"sourceCodeEnd":761,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java#L725-L761","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"// before (application.properties)\nquarkus.quartz.misfire-policy.myJob=simple-trigger-reschedule-now-with-remaining-repeat-count\n// after\nquarkus.quartz.misfire-policy.myJob=cron-trigger-fire-once-now","handlingStrategy":"validation","validationCode":"boolean valid = QuartzMisfirePolicy.validCronValues().contains(configuredPolicy);\nif (!valid) { throw new IllegalArgumentException(\"Policy \" + configuredPolicy + \" not valid for cron jobs\"); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["quarkus","quartz","configuration","misfire-policy"],"backgroundTag":"invalid-config-value","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}