Question

I am using quartz.net as a scheduler in a Microsoft Azure Web Role. I can get Quartz.net to work just fine if I use the RamDataStore. However, I want to break this into two components: the first will allow scheduling of jobs through a web interface and the second will execute the jobs through a worker role. To have this distributed processing, I will need to use an ADOJobStore.

Everything works fine with the RamDataStore but it breaks when I try to switch over to the ADOJobStore. So this leads me to believe that there is something in my properties that I'm missing. I am using Azure SQL database and while this is similar to SQL Server, there are some gotchas that sometimes cause problems.

I am using Quartz.net 2.0 (from nuGet) in VS2010, the database is Azure SQL.

When I call .GetScheduler(), I get the following exception:

{"JobStore type 'Quartz.Impl.AdoJobStore.JobStoreTX' props could not be configured."}

with the details:

{"Could not parse property 'default.connectionString' into correct data type: No writable property 'Default.connectionString' found"}

My connection code (including programatically set properties):

        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();

Any help or suggestions would be appreciated.

Was it helpful?

Solution

You have small but subtle error in your data source property naming, it should read:

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

Also there is a property connectionStringName if you want to use the connection string section of configuration file.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top