如何配置Quartz.net以使用Azure SQL数据库来存储ADOJobStore详细信息

时间:2012-09-26 18:22:43

标签: azure azure-sql-database quartz.net quartz.net-2.0

我使用quartz.net作为Microsoft Azure Web角色中的调度程序。如果我使用RamDataStore,我可以让Quartz.net正常工作。但是,我想将其分为两个部分:第一部分将允许通过Web界面调度作业,第二部分将通过辅助角色执行作业。要进行这种分布式处理,我需要使用ADOJobStore。

使用RamDataStore一切正常但是当我尝试切换到ADOJobStore时它会中断。所以这让我相信我的遗产中有些东西我不知道。我使用的是Azure SQL数据库,虽然这与SQL Server类似,但有些问题有时会导致问题。

我在VS2010中使用Quartz.net 2.0(来自nuGet),数据库是Azure SQL。

当我调用.GetScheduler()时,我得到以下异常:

  

{“JobStore类型'Quartz.Impl.AdoJobStore.JobStoreTX'道具不能   配置。“}

详细信息:

  

{“无法将属性'default.connectionString'解析为正确   数据类型:没有可写属性'Default.connectionString'找到“}

我的连接代码(包括以编程方式设置的属性):

        NameValueCollection properties = new NameValueCollection();
        properties["quartz.scheduler.instanceName"] = "SchedulingServer";
        properties["quartz.threadPool.type"] = "Quartz.Simpl.ZeroSizeThreadPool, Quartz";

        properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
        properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
        properties["quartz.jobStore.clustered"] = "false";
        properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";

       properties["quartz.jobStore.dataSource"] = "default";
       properties["quartz.jobStore.default.connectionString"] = "Server=tcp:serverName.database.windows.net;Database=scheduler;User ID=scheduler@serverName;Password=***;Trusted_Connection=False;Encrypt=True;";
       properties["quartz.jobStore.default.provider"] = "SqlServer-20";
       properties["quartz.jobStore.useProperties"] = "true";

       ISchedulerFactory sf = new StdSchedulerFactory(properties);
       _scheduler = sf.GetScheduler();

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分:7)

您的数据源属性命名中存在小但微妙的错误,应该显示为:

properties["quartz.dataSource.default.connectionString"] = "Server=tcp:serverName.database.windows.net;Database=scheduler;User ID=scheduler@serverName;Password=***;Trusted_Connection=False;Encrypt=True;";

如果要使用配置文件的连接字符串部分,还有一个属性 connectionStringName