quarkusio/quarkus · error · IllegalArgumentException
Global cron trigger misfire policy configured with invalid o
Error message
Global cron trigger misfire policy configured with invalid option. Valid options are: ${validOptions} What it means
At QuartzSchedulerImpl startup the global misfire policy for cron triggers (quarkus.quartz.cron-trigger.misfire-policy) is validated against QuartzMisfirePolicy.validCronValues(). An unknown value throws IllegalArgumentException listing all valid dashed-name options. Not every misfire policy is valid for cron triggers (e.g. skip-if-fires is simple-trigger-only).
Source
Thrown at extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java:155
this.runtimeConfig = quartzSupport.getRuntimeConfig();
this.schedulerConfig = schedulerConfig;
this.storeType = quartzSupport.getBuildTimeConfig().storeType();
StartMode startMode = schedulerRuntimeConfig.startMode();
boolean forceStart;
if (startMode != StartMode.NORMAL) {
startHalted = (startMode == StartMode.HALTED);
forceStart = startHalted || (startMode == StartMode.FORCED);
} else {
startHalted = false;
forceStart = false;
}
var simpleTriggerConfig = runtimeConfig.simpleTriggerConfig();
var cronTriggerConfig = runtimeConfig.cronTriggerConfig();
if (!QuartzMisfirePolicy.validCronValues().contains(cronTriggerConfig.misfirePolicyConfig().misfirePolicy())) {
throw new IllegalArgumentException(
"Global cron trigger misfire policy configured with invalid option. Valid options are: "
+ QuartzMisfirePolicy.validCronValues().stream()
.map(QuartzMisfirePolicy::dashedName)
.collect(Collectors.joining(", ")));
}
if (!QuartzMisfirePolicy.validSimpleValues().contains(simpleTriggerConfig.misfirePolicyConfig().misfirePolicy())) {
throw new IllegalArgumentException(
"Global simple trigger misfire policy configured with invalid option. Valid options are: "
+ QuartzMisfirePolicy.validSimpleValues().stream()
.map(QuartzMisfirePolicy::dashedName)
.collect(Collectors.joining(", ")));
}
JobInstrumenter instrumenter = null;
if (schedulerConfig.tracingEnabled() && jobInstrumenter.isResolvable()) {
instrumenter = jobInstrumenter.get();
}
View on GitHub (pinned to e1c734241f)
Solutions
- Use one of the listed valid dashed options, e.g. smart-policy, ignore-misfire-policy, fire-now, fire-once-now, do-nothing.
- If you intended skip-if-fires, set it under quarkus.quartz.simple-trigger.misfire-policy instead.
- Check the Quarkus Quartz guide for the exact allowed values for your version.
Example fix
# before quarkus.quartz.cron-trigger.misfire-policy=skip-if-fires # after quarkus.quartz.cron-trigger.misfire-policy=do-nothing
Defensive patterns
Strategy: validation
Validate before calling
// verify value against the enum at startup/test time
String policy = ConfigProvider.getConfig()
.getValue("quarkus.quartz.cron-trigger.misfire-policy", String.class);
java.util.Set<String> valid = java.util.Set.of("smart-policy", "ignore-misfire-policy",
"fire-now", "fire-once-now", "do-nothing");
if (!valid.contains(policy)) {
throw new IllegalArgumentException("Invalid cron misfire policy: " + policy + ", valid: " + valid);
} Prevention
- Use the dashed names exactly as listed in the error message.
- Remember cron triggers do not accept skip-if-fires.
- Pin config values in a shared config test across services.
When it happens
Trigger: Set quarkus.quartz.cron-trigger.misfire-policy to a value not in the valid cron set — misspelled, wrong casing/dashes, or a policy only valid for simple triggers (e.g. skip-if-fires).
Common situations: Copy-pasting a simple-trigger policy value into the cron-trigger property; typos like 'fire_now' vs 'fire-now'; outdated docs from older Quarkus versions.
Related errors
- Global simple trigger misfire policy configured with invalid
- Cron job {identity} configured with invalid misfire policy {
- Simple job {identity} configured with invalid misfire policy
- Parameter 'mode' was set to '<mode>' while expected one of '
- Maven version can't be empty.
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/76afe41647a53a68.
Report an issue: GitHub.