我有一个系统,我正在安排一些工作并触发在 Windows 服务中的某个特定时间运行。由于我的 Windows 服务可以因数 o0f 原因重新启动,因此我想在它们计划的时间触发已经计划的作业,因此我使用 AdoJobStore,因为它保留了作业/触发器信息。我在想在调度程序启动时它会加载未完成的作业并触发它。但我不能使用以下设置配置 Adojobstore
<add key="quartz.scheduler.instanceName" value="DBScheduler" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="100" />
<add key="quartz.threadPool.threadPriority" value="2" />
<add key="quartz.scheduler.dbFailureRetryInterval" value="6000000000" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.misfireThreshold" value="600000" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.dataSource" value="myDS" />
<add key="quartz.dataSource.myDS.connectionString" value="Server=localhost;Port=3306;database=quartznet;Uid=root;pwd=root;allow user variables=true;CharSet=utf8;" />
<add key="quartz.dataSource.myDS.provider" value="MySql" />
<add key="quartz.serializer.type" value="binary" />
调度启动的代码看起来像在我的 Windows 启动类中
StdSchedulerFactory factory = new StdSchedulerFactory();
MyQuartzScheduler = await factory.GetScheduler();
await MyQuartzScheduler.Start();
我认为我有时间表并且谁的条目保存在quartznet db中的未来工作将在开始时间表后在那里触发,但它没有。我需要添加任何其他设置或代码吗?
看起来问题是由于一种配置设置
看来以下配置设置是罪魁祸首
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
改成
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" />
它开始工作了。一些quartz.net经验的人可以确认错误
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句