You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quartz.Net无法持久化DailyTimeInterval触发器问题咨询

Quartz.Net 全类型触发器持久化问题排查与修复

问题根因

不存在单独的配置项用来“开启所有触发器类型持久化”,你遇到的DailyTimeInterval触发器首次执行后就被从数据库删除的问题,完全是现有配置错误导致的:

  • 序列化器配置重复且存在兼容问题:你的配置中两次声明了quartz.serializer.type,后定义的自定义MySerializerType会覆盖前面的官方json序列化器配置。如果自定义序列化器没有完整实现DailyTimeIntervalTrigger全字段(尤其是剩余执行次数、下次触发时间、重复间隔规则、生效时间窗口这类运行时状态字段)的序列化、反序列化逻辑,Quartz在触发器首次执行完成后重新计算后续触发时间时,会因为读取不到合法的状态字段,判定触发器已满足终止条件,直接将其从持久化存储中删除。
  • quartz.jobStore.useProperties配置错误:当前配置将该值设为true,该模式下JobStore仅支持持久化字符串类型的键值对,无法存储复杂类型的嵌套属性。DailyTimeIntervalTrigger属于带复杂规则的触发器,其周生效规则、间隔粒度、时间窗口过滤等属性都不是简单字符串类型,首次执行后回写运行状态时会丢失核心规则字段,最终被判定为无后续执行计划而删除。Cron触发器的核心规则是字符串格式的Cron表达式,刚好适配该模式的存储要求,因此可以正常持久化。

修复步骤

  • 删除重复的quartz.serializer.type配置项,无特殊需求时直接保留官方json序列化器配置即可;如果必须使用自定义序列化器,需要确保其完整覆盖Quartz所有内置触发器、Job类型的全字段序列化逻辑,不能遗漏运行时状态字段。
  • 将quartz.jobStore.useProperties配置值修改为false,允许JobStore序列化存储复杂类型的触发器状态与规则字段。
  • 无需额外为DailyTimeInterval触发器添加专属持久化配置,你当前使用的SQLiteDelegate在3.x及以上版本的Quartz.Net中已经原生支持所有内置触发器类型的数据库持久化。

内容的提问来源于stack exchange,提问作者Travis Pettry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:45:42