我在嘗試讓Quartz.NET與AdoJobStore一起工作時遇到了問題。這裏沒有任何其他問題似乎正在解決我的問題。我能夠在沒有AdoJobStore配置的情況下正常工作,但希望將所有內容保存到最後,但是在嘗試GetScheduler()
時出現錯誤,我無法弄清楚。用SQL Server AdoJobStore配置Quartz.NET
這裏是我的石英app.config
部分:
<quartz>
<add key="quartz.scheduler.instanceName" value="XxxDefaultQuartzScheduler"/>
<add key="quartz.scheduler.instanceId" value="instance_one"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="1"/>
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
<add key="quartz.jobStore.misfireThreshold" value="60000"/>
<add key="quartz.jobStore.dataSource" value="default"/>
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"/>
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/>
<add key="quartz.jobStore.tablePrefix" value="QRTZ_"/>
<add key="quartz.dataSource.default.connectionString" value="Server=(local);Database=Quartz;UID=XXXX;PWD=XXXX"/>
<add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
<add key="quartz.dataSource.useProperties" value="true"/>
</quartz>
下面是相關的初始化代碼:
var config = (NameValueCollection) ConfigurationManager.GetSection("quartz");
ISchedulerFactory factory = new StdSchedulerFactory(config);
// This is where an ArgumentOutOfRange exception occurs:
IScheduler scheduler = factory.GetScheduler();
而且我得到的錯誤是ArgumentOutOfRangeException
:
長度不能少比零。\ r \ n參數名稱:長度
通過代碼,我可以驗證配置部分步進被正確讀取,我再三地檢查拼寫錯誤和配置屬性的錯誤的資本。我已經驗證了數據庫可以通過我擁有的connectionString
訪問。
當我在代碼中檢查並檢查即時窗口中的工廠變量時,我注意到的一件事是,它總是說「AllSchedulers:Count = 0」 - 不確定是否因爲我還沒有實例化一個或者如果這是我的問題的一部分。試圖給GetScheduler()
的instanceName
從配置 -
factory.GetScheduler("XxxDefaultQuartzScheduler")
也不起作用。
我在想什麼/做錯了什麼?請指教。
作爲任何人訪問這個問題,'quartz.jobStore.lockHandler.type'屬性應該被移除,因爲它迫使石英使用效率較低的鎖定策略,這將產生警告你的日誌。 –