首页 > 解决方案 > Quartz 2.6.2 和 .NET Core?- 错误“无法初始化数据源”

问题描述

我正在使用旧版本的 Quartz.NET (v2.6.2) 和 .NET Core(或者可能是 .NET5)。尝试使用 StdSchedulerFactory.GetScheduler 时出现错误。我所有的配置设置都在我的 appsettings.json 中,我在其中使用这些值填充 NameValueCollection 并使用 DI 将它们注入到我的类中。

["quartz.scheduler.instanceId"] = "instance_one",
["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
["quartz.threadPool.threadCount"] = "5",
["quartz.jobStore.misfireThreshold"] = "60000",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "false",
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.dataSource.default.provider"] = "SqlServer-20",
["quartz.dataSource.default.connectionString"] = quartzConn

我正在使用这样的 StdSchedulerFactory,其中 Settings.Properties 是包含所有配置设置的 NameValueCollection:

var factory = new StdSchedulerFactory(Settings.Properties);
var scheduler =  factory.GetScheduler();

GetScheduler方法上,引发错误“无法初始化数据源:默认值”。

疯狂的是,这段代码在使用常规 web.config 提供配置设置的 Framework 4.x 项目中运行良好。此外,当我在上面的代码中更改为使用 Quartz 3.X 时,appsettings.json 中的配置可以正常工作。似乎我混合和匹配两个版本导致 Quartz 不知道如何检索某些值的问题?

有没有办法手动构建我的调度程序而不使用工厂?

谢谢!

标签: configurationdatasourcequartz-schedulerquartz.net-2.0

解决方案


我不得不回到 Framework 4 和 Quartz 2.6 才能让它们很好地协同工作。我只能让 Quartz 3.x 与 .NET Core/5 一起工作。使用 dotPeek 单步执行源代码,Quartz 2.6 使用 ConfigurationManager 来提取 Core/5 中不存在的 web.config 详细信息。在这一点上,我不记得我是否尝试将自己的 web.config 文件添加到这个项目中,但我已经继续前进了。


推荐阅读