c# - 在设置期间将 JobDataMap 添加到作业时,Quarts.net 调度程序无法添加作业 SQL 表
问题描述
我在调度包含 JobMapData 的作业时遇到问题。我正在使用 SQL Server 来保存作业/触发器数据。
当我在不添加 JobMapData 的情况下安排我的作业时,它们会按预期显示在数据库中,并且我的应用程序可以完美地执行这些作业。但是,当我为作业添加所需的 JobMapData 时,没有触发器/作业数据被插入到表中。
[我的石英配置]
var schedulerConfig = new NameValueCollection
{
{ "quartz.scheduler.instanceName", "TaskScheduler" },
{ "quartz.scheduler.instanceId", "TaskScheduler" },
{ "quartz.threadPool.type", "Quartz.Simpl.SimpleThreadPool, Quartz" },
{ "quartz.threadPool.threadCount", "3"},
{ "quartz.threadPool.threadPriority", "Normal" },
{ "quartz.jobStore.misfireThreshold", "60000"},
{ "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
{ "quartz.jobStore.useProperties", "true" },
{ "quartz.jobStore.dataSource", "default" },
{ "quartz.jobStore.tablePrefix", "_QRTZ_" },
{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"},
{ "quartz.dataSource.default.connectionString", "Server=XXXXXXXXXXX; Database=TaskScheduling;Trusted_Connection=True;MultipleActiveResultSets=true" },
{ "quartz.dataSource.default.provider", "SqlServer" },
{ "quartz.serializer.type", "binary"},
};
[工作设置]
IJobDetail job = JobBuilder.Create<SendCyrstalReportJob>()
.WithIdentity("SendWorkCenterLoadSummary", "TaskSchedulerService")
.WithDescription("Sends the WorkCenterLoadSummary report to a list of email recipients")
.UsingJobData("parameters", "MailCrystalReportAsExcel -reportName \\\\fs5\\Reports\\LoadSummary6WeekForecast.rpt -recipients mailrecipient@addy.com")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("WorkCenterLoadSummaryTrigger", "TaskSchedulerService")
.WithCronSchedule("0/10 * * * * ?")
.ForJob("SendWorkCenterLoadSummary", "TaskSchedulerService")
.UsingJobData("command", "c:\\CommandConsole\\ecc.exe")
.Build();
_scheduler.ScheduleJob(job, trigger);
_scheduler.ListenerManager.AddJobListener(_jobListener);
所提供的代码将导致不会将作业/触发器数据添加到数据库中。如果我从作业定义和触发器定义中注释掉 UsingJobData将导致作业被调度并随后按预期执行。
没有抛出错误,没有向日志文件或控制台窗口报告任何问题,只是没有数据进入数据库。
任何想法可能会发生什么?:-)
解决方案
我有同样的问题。经过大量尝试/错误后,我找到了这个解决方案:
在您的调度程序配置中更改此设置,如下所示:
{ "quartz.jobStore.useProperties", "false" }
将此标志设置为“false”或将其从配置中删除。如果您将其设置为“true”,Quartz 假定您所有的作业数据映射值都是字符串(根据文档)。在我的情况下,我在值中发送整数和字符串,这个更改修复了它。看来,您正在发送值中的字符串,但您可以尝试更改此设置。资料来源:工作商店文档
推荐阅读
- shell - Erlang 分布式 - 一些节点共享 1 个应用程序
- node.js - 如何在平均应用程序中应用基于角色的身份验证?
- rest - Symfony 发布请求正文参数?
- json - 如何在delphi中对TJSONArray进行排序
- ios - 在弹出键盘时实现向上移动视图时修复这些丑陋的结果
- html - 如何将文本转换为 Angular 4 中的 HTML 文本
- python - 根据 np.where 或类似的字典值到数组
- uwp - UWP 应用程序 MainWindow 未在左侧显示第二个按钮
- regex - 如何使用正则表达式返回一行但不包括表达式?
- design-patterns - 基于消息类型处理不同消息的设计模式