{"record":{"id":"0e3a68d77f02ade6","repo":"quarkusio/quarkus","slug":"invalid-schedule-configuration-scheduled","errorCode":null,"errorMessage":"Invalid schedule configuration: {scheduled}","messagePattern":"Invalid schedule configuration: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java","lineNumber":796,"sourceCode":"                    break;\n                case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_EXISTING_COUNT:\n                    simpleScheduleBuilder.withMisfireHandlingInstructionNextWithExistingCount();\n                    break;\n                case SIMPLE_TRIGGER_RESCHEDULE_NEXT_WITH_REMAINING_COUNT:\n                    simpleScheduleBuilder.withMisfireHandlingInstructionNextWithRemainingCount();\n                    break;\n                case CRON_TRIGGER_DO_NOTHING:\n                    throw new IllegalArgumentException(\"Simple job \" + identity\n                            + \" configured with invalid misfire policy \"\n                            + perJobConfig.misfirePolicy().dashedName() +\n                            \"\\nValid options are: \"\n                            + QuartzMisfirePolicy.validSimpleValues().stream()\n                                    .map(QuartzMisfirePolicy::dashedName)\n                                    .collect(Collectors.joining(\", \")));\n            }\n            scheduleBuilder = simpleScheduleBuilder;\n        } else {\n            throw new IllegalArgumentException(\"Invalid schedule configuration: \" + scheduled);\n        }\n\n        TriggerBuilder<?> triggerBuilder = TriggerBuilder.newTrigger()\n                .withIdentity(identity, Scheduler.class.getName())\n                .forJob(jobDetail)\n                .withSchedule(scheduleBuilder);\n        if (description != null) {\n            triggerBuilder.withDescription(description);\n        }\n\n        Long millisToAdd = null;\n        if (scheduled.delay() > 0) {\n            millisToAdd = scheduled.delayUnit().toMillis(scheduled.delay());\n        } else if (!scheduled.delayed().isEmpty()) {\n            millisToAdd = SchedulerUtils.parseDelayedAsMillis(scheduled);\n        }\n        if (millisToAdd != null) {\n            triggerBuilder.startAt(new Date(Instant.now()","sourceCodeStart":778,"sourceCodeEnd":814,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java#L778-L814","documentation":"`createTrigger` builds either a cron or a simple schedule from a SyntheticScheduled descriptor. If the descriptor has neither a cron expression nor an `every` interval, there is no schedule type to build and an IllegalArgumentException is thrown.","triggerScenarios":"Scheduling a Quartz job programmatically via QuartzJobDefinition with a `cron(...)`/`every(...)` neither set (or both null/empty), so the switch falls to the else branch.","commonSituations":"Calling `scheduler.newJob(...).schedule()` after building a definition with only identity/description; a builder misuse where `setCron` was expected but never called; misconfigured synthetic scheduled metadata.","solutions":["Call `.setCron(\"0 0/5 * * * ?\")` or `.setEvery(\"10m\")` on the QuartzJobDefinition before `.schedule()`","Verify the configuration source (e.g. @Scheduled expression) actually yields a non-empty cron or every value","Log the SyntheticScheduled identity/cron/every to find which job lacks a schedule"],"exampleFix":"// before\nscheduler.newJob(\"reportJob\").setTask(exec -> run()).schedule();\n// after\nscheduler.newJob(\"reportJob\").setCron(\"0 0 1 * * ?\").setTask(exec -> run()).schedule();","handlingStrategy":"validation","validationCode":"boolean schedulable = cron != null && !cron.isBlank() || every != null && !every.isBlank();\nif (!schedulable) { throw new IllegalArgumentException(\"Job needs cron or every\"); }","typeGuard":null,"tryCatchPattern":"try { definition.schedule(); } catch (IllegalArgumentException e) { log.error(\"Schedule missing: {}\", e.getMessage()); }","preventionTips":["Always chain setCron or setEvery before schedule()","Centralize job creation in one factory that enforces schedule presence","Cover each programmatic job with a startup smoke test"],"tags":["quarkus","quartz","schedule","programming-error"],"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-14T00:17:10.932Z"}