Mam problem z próbą przekonania Quartz.NET do pracy z AdoJobStore. Żadne z pozostałych pytań nie wydaje się być przyczyną problemu, którym jestem. Byłem w stanie sprawić, żeby działało poprawnie bez konfiguracji AdoJobStore, ale chciałbym, aby wszystko pozostało w końcu, ale dostaję błąd, próbując GetScheduler()
, którego nie mogę zrozumieć.Konfigurowanie Quartz.NET za pomocą SQL Server AdoJobStore
Oto mój kwarc app.config
sekcja:
<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>
A oto odpowiedni kod inicjalizacji:
var config = (NameValueCollection) ConfigurationManager.GetSection("quartz");
ISchedulerFactory factory = new StdSchedulerFactory(config);
// This is where an ArgumentOutOfRange exception occurs:
IScheduler scheduler = factory.GetScheduler();
a błąd jestem coraz to ArgumentOutOfRangeException
:
Długość nie może być mniejsza niż zero. \ r \ n Nazwa parametru: długość
Krok po kroku Mogę zweryfikować, że sekcja konfiguracji zostanie poprawnie odczytana, a ja dwukrotnie i potrójnie sprawdzam pod kątem błędów pisowni i błędnej kapitalizacji właściwości konfiguracji. Zweryfikowałem, że baza danych jest dostępna z connectionString
, którą mam.
Jedną rzeczą, którą zauważyłem podczas przechodzenia przez kod i sprawdzania zmiennej fabrycznej w okienku bezpośrednim jest to, że zawsze mówi "AllSchedulers: Count = 0" - nie jestem pewien, czy to dlatego, że nie stworzyłem jeszcze jednej lub jeśli to część mojego problemu. Próbując dać GetScheduler()
instanceName
od konfiguracji -
factory.GetScheduler("XxxDefaultQuartzScheduler")
nie działa albo.
Czego mi brakuje/robię źle? Proszę o poradę.
Dla każdego, kto odwiedza to pytanie, należy usunąć właściwość 'quartz.jobStore.lockHandler.type', która wymusza użycie kwarcu w mniej wydajnej strategii blokowania, co spowoduje wyświetlenie ostrzeżeń. twoje dzienniki. –