【发布时间】:2021-06-02 23:31:32
【问题描述】:
在我们的 asp.net 网络表单应用程序中,我们有需要向用户发送一些电子邮件的日常工作。
最近我们开始使用 Quartz.net 来允许作业非顺序运行。我正在使用 ADO 作业存储来安排作业并创建触发器。在创建作业数据时,我还提供了 .dll(完整路径)和必须为该作业执行的类名。这是一个只运行一次的控制台应用程序。
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
JobDataMap jobData = new JobDataMap();
jobData.Add("JobID", jobDataRow["Id"].ToString());
jobData.Add("AssemblyName", assemblyName);
jobData.Add("ClassName", className);
jobData.Add("AssemblyPath", assemblyPath);
var jobDetail = JobBuilder.Create()
.StoreDurably()
.WithIdentity(name)
.SetJobData(jobData)
.Build(); ;
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(triggerName)
.WithCronSchedule(cronexpr)
.StartNow()
.Build();
scheduler.ScheduleJob(jobDetail, trigger, true);
然后我们有一个启动调度程序的 Windows 服务。每次构建后,此 Windows 服务都会停止并重新启动。
StdSchedulerFactory schedulerFactory = new
StdSchedulerFactory(schedulerProperties);
scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
石英属性声明:-
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="2" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.scheduler.instanceId" value="Auto" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
<add key="quartz.jobStore.clustered" value="false" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.plugin.triggHistory.type" value="Quartz.Plugin.History.LoggingJobHistoryPlugin" />
<add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
<add key="quartz.scheduler.exporter.port" value="555" />
<add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler" />
<add key="quartz.scheduler.exporter.channelType" value="tcp" />
<add key="quartz.scheduler.exporter.channelName" value="httpQuartz" />
现在的问题是 - 当对类文件进行任何更改(例如更改现有电子邮件模板)时,当从 Quartz 调度程序运行时,作业仍使用旧电子邮件模板发送电子邮件。
如果我们手动运行作业,那么电子邮件会正确发送新的更改。
每次类文件发生变化时,是否需要重新创建 Quartz 作业数据映射(QRTZ_JOB_DETAILS 表)?
请帮忙..我被困在这里,找不到任何相关的帖子。
提前谢谢你!!
【问题讨论】:
标签: c# quartz-scheduler quartz.net