Quartz.NET v3.5.0连接SqlServer数据源初始化失败求助
问题:Quartz v3.5.0 切换SqlServer JobStore后数据源初始化失败
运行环境:.NET Framework 4.8 + Autofac IoC + Quartz v3.5.0(Windows服务)
原本使用RAMJobStore时功能正常,在本地SqlServer中创建QuartzData数据库并配置切换到AdoJobStore后,调用GetScheduler()时持续抛出异常:
Quartz.SchedulerException: 'Could not Initialize DataSource: default'
根异常:ArgumentOutOfRangeException: There is no metadata information for provider 'SqlServer-20' Parameter name: providerName
相关配置与代码
App.config 配置
<quartz> <add key="quartz.scheduler.instanceName" value="DefaultQuartzScheduler" /> <add key="quartz.scheduler.instanceId" value="instance_one" /> <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" /> <add key="quartz.threadPool.threadCount" value="5" /> <add key="quartz.jobStore.misfireThreshold" value="60000" /> <add key="quartz.serializer.type" value="json" /> <add key="quartz.jobStore.clustered" value="false" /> <!--<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/> --> <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" /> <add key="quartz.jobStore.useProperties" value="true" /> <add key="quartz.jobStore.tablePrefix" value="QRTZ_" /> <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" /> <add key="quartz.jobStore.dataSource" value="default" /> <add key="quartz.dataSource.default.connectionString" value="Server=localhost;Database=QuartzData;Uid=XXX;Pwd=XXX" /> <add key="quartz.dataSource.default.provider" value="SqlServer-20" /> </quartz>
Program.cs 核心代码
var config = (NameValueCollection)ConfigurationManager.GetSection("quartz"); ISchedulerFactory schedulerFactory = new StdSchedulerFactory(config); IScheduler Scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();
解决方案
异常根源是数据源提供者名称配置错误,Quartz v3.5.0中没有SqlServer-20这个合法的提供者名称,需根据使用的ADO.NET驱动修改:
- 若使用.NET Framework默认的
System.Data.SqlClient驱动,将提供者名称改为SqlServer - 若使用新版
Microsoft.Data.SqlClient驱动,将提供者名称改为SqlServer-Microsoft
修改后的配置项示例:
<add key="quartz.dataSource.default.provider" value="SqlServer" />
额外检查项:
- 确认已执行Quartz官方提供的对应SqlServer版本的建表脚本,确保QuartzData数据库中存在完整的QRTZ_开头的表结构
- 验证连接字符串中的账号拥有QuartzData数据库的读写权限
- 若使用
Microsoft.Data.SqlClient,需确保项目已安装对应版本的Microsoft.Data.SqlClientNuGet包
内容的提问来源于stack exchange,提问作者RoxSeibert
相关产品推荐
相关产品推荐

