{"record":{"id":"e8c072cba921dac6","repo":"apache/dolphinscheduler","slug":"quartz-scheduler-start-error","errorCode":"QUARTZ_SCHEDULER_START_ERROR","errorMessage":"QUARTZ_SCHEDULER_START_ERROR","messagePattern":"QUARTZ_SCHEDULER_START_ERROR","errorType":"error_code","errorClass":"SchedulerException","httpStatus":null,"severity":"error","filePath":"dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java","lineNumber":48,"sourceCode":"import org.quartz.Scheduler;\n\nimport com.google.common.collect.Sets;\n\n@Slf4j\npublic class QuartzScheduler implements SchedulerApi {\n\n    private final Scheduler scheduler;\n\n    public QuartzScheduler(Scheduler scheduler) {\n        this.scheduler = scheduler;\n    }\n\n    @Override\n    public void start() throws SchedulerException {\n        try {\n            scheduler.start();\n        } catch (Exception e) {\n            throw new SchedulerException(QuartzSchedulerExceptionEnum.QUARTZ_SCHEDULER_START_ERROR, e);\n        }\n    }\n\n    @Override\n    public void insertOrUpdateScheduleTask(int projectId, Schedule schedule) throws SchedulerException {\n        try {\n            CronTrigger cornTrigger = QuartzCornTriggerBuilder.newBuilder()\n                    .withProjectId(projectId)\n                    .withSchedule(schedule)\n                    .build();\n            JobDetail jobDetail = QuartzJobDetailBuilder.newBuilder()\n                    .withProjectId(projectId)\n                    .withSchedule(schedule.getId())\n                    .build();\n            scheduler.scheduleJob(jobDetail, Sets.newHashSet(cornTrigger), true);\n            log.info(\"Success scheduleJob: {} with trigger: {} at quartz\", jobDetail, cornTrigger);\n        } catch (Exception e) {\n            log.error(\"Failed to add scheduler task, projectId: {}, scheduler: {}\", projectId, schedule, e);","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java#L30-L66","documentation":"The underlying Quartz scheduler.start() threw while transitioning the scheduler from STANDBY to RUNNING — typically because the Quartz JDBC job store cannot acquire its cluster lock, the datasource is misconfigured/unreachable, or a non-serialized Job class breaks startup. It is wrapped in a SchedulerException so the caller cannot silently run with a dead scheduler.","triggerScenarios":"Thrown at dolphinscheduler-scheduler-plugin/dolphinscheduler-scheduler-quartz/src/main/java/org/apache/dolphinscheduler/scheduler/quartz/QuartzScheduler.java:48 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the Quartz datasource (JDBC URL, credentials, driver) and that the quartz tables exist and are reachable","Check for another master holding the Quartz cluster lock (QRTZ_LOCKS) or misaligned cluster properties (org.quartz.jobStore.clusterCheckinInterval)","Inspect the caused-by exception in logs: ObjectNotFoundException indicates a non-serializable Job/Trigger class","Restart the master after fixing the configuration so start() can be retried"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}