Quartz.NET Changelog

What's new in Quartz.NET 3.8.0

Jan 5, 2024
  • Add Qodana scanning by @lahma in #2110
  • Ensure that the DailyCalendar use the same TimeZone offset for all the checks by @kvpt in #2113
  • Fix for JobDataMap, TryGetValue return false when key is null/doesn't exist by @jafin in #2125
  • SendMailJob to throw JobExecutionException on BuildMessage construction failure due to missing mandatory params. by @jafin in #2126
  • Backport test changes to ReschedulingTriggerShouldKeepOriginalNextFireTime from main to 3.x by @jafin in #2129
  • JobInterruptMonitorPlugin should tolerate missing JobDataMapKeyAutoInterruptable by @lahma in #2191
  • Add NET 8.0 targeting by @lahma in #2192
  • Upgrade TimeZoneConverter to version 6.1.0 by @lahma in #2194
  • Improve trimming compatibility by @lahma in #2195
  • Support injecting dependencies to XMLSchedulingDataProcessorPlugin by @lahma in #2196
  • Enable trimmed publish for ASP.NET Core example by @lahma in #2197

New in Quartz.NET 3.7.0 (Aug 5, 2023)

  • What's Changed:
  • Improve custom job store DI registration API by @lahma in #2063
  • Obsolete plain UseJsonSerializer() by @lahma in #2077
  • Mark UseMicrosoftDependencyInjectionJobFactory() as obsolete, remove UseMicrosoftDependencyInjectionScopedJobFactory() by @lahma in #2085
  • Change QuartzHostedService from internal to public by @rf-0 in #2090
  • Remove enumerator usage in AcquireNextTriggers when getting timeTriggers min value by @lahma in #2092
  • Make private and internal classes sealed by @lahma in #2098
  • Add net6.0 target by @lahma in #2106

New in Quartz.NET 3.6.3 (Jun 26, 2023)

  • What's Changed:
  • Run postgres integration tests as part of CI build by @lahma in #1935
  • Change QuartzServiceCollectionExtensions namespace to Quartz.AspNetCore in Quartz.AspNetCore project by @romantitov in #1950
  • Detect invalid CRON expression character trailing a '?' by @jafin in #1955
  • ServiceCollectionSchedulerFactory.GetNamedConnectionString passes wrong value to base by @msa48 in #1960
  • Extend object passed to DiagnosticListener.Start/EndActivity by @dima-zhemkov in #1995
  • JobInterruptMonitor Plugin: Read MaxRunTime from MergedJobDataMap by @alanblack in #2004
  • V3: return PersistJobDataAfterExecution flag in SelectJobDetail.fixed not… by @wuuer in #2014
  • Fix persistence of extended properties when the trigger type is changed (v3) by @philr in #2040
  • Fix disposing of MS DI job scopes by @lahma in #2059
  • [3.x] Optimize reading blobs on SQL Server by @OronDF343 in #2061

New in Quartz.NET 3.6.2 (Feb 26, 2023)

  • Fix SqlSelectJobDetail to include IS_NONCONCURRENT (#1927)

New in Quartz.NET 3.6.1 (Feb 26, 2023)

  • FIXES:
  • Fix SqlSelectJobDetail to include IS_NONCONCURRENT (#1927)

New in Quartz.NET 3.6.0 (Jan 29, 2023)

  • NEW FEATURES:
  • Add explicit netcoreapp3.1 and net6.0 targets to MS integration projects (#1879)
  • Use IHostApplicationLifetime instead of IApplicationLifetime in >= netcoreapp3.1 Hosting targets (#1593)
  • Add ResetTriggerFromErrorState functionality (#1904)
  • FIXES:
  • Fix named connection string resolution when using MS DI and its configuration system (#1839)
  • Upgrade to System.Configuration.ConfigurationManager 6.0.1 to avoid vulnerable dependency chain (#1792)
  • Fix configuration handling for custom DB provider (#1795)
  • Add extra overloads for registering listeners (#1852)
  • JobDataMap.TryGetGuidValue should return Guid instead of int (#1856)
  • Upgrade to Newtonsoft.Json 13.0.1 (#1859)

New in Quartz.NET 3.5.0 (Sep 18, 2022)

  • NEW FEATURES:
  • Allow PersistJobDataAfterExecution and ConcurrentExecutionDisallowed to be explicitly set in JobBuilder and pulled up to IJobConfigurator (#1575)
  • Add TryGet functions to JobDataMap and StringKeyDirtyFlagMap (#1592)
  • Add UseMySqlConnector overload for DB configuration (#1621)
  • Validate database schema during scheduler initialization (#1716)
  • Support DataSource name configuration (#1710)
  • Add "UsePersistentStore where T : IJobStore" in DI Extension (#1715)
  • FIXES:
  • Make RAMJobStore.RemoveJobInternal return true even if job has no triggers (#1580)
  • Configuration property quartz.jobStore.dbRetryInterval will be correctly set when constructing the Scheduler JobStore.
  • If you previously had configuration with the key quartz.scheduler.dbFailureRetryInterval please change to the above mentioned key.
  • DailyCalendar doesn't include first and last millisecond of day in checks (#1665)
  • StdSchedulerFactory and derived factories are not thread-safe (#1587)
  • Change QuartzOptions to inherit from Dictionary<string, string?> instead of NameValueCollection to fix Microsoft.Extensions.Configuration 7 RC integration (#1748)
  • IMPROVEMENTS:
  • Reduce scheduler initialization logging noise (#1752)

New in Quartz.NET 3.4.0 (Mar 27, 2022)

  • FIXES:
  • Fix for job type loading after version change
  • Fix StartDelayed delaying the start of other hosted services
  • Set NextFireTime of the replaced trigger relative to the old trigger's StartTime if the old trigger's PreviousFireTime is null
  • Include InvertTimeRange property in DailyCalendar.Clone
  • QuartzHealthCheck never recovers after detecting failure
  • Microsoft DI integration does not working with Microsoft.Extensions.Hosting v7 preview
  • IMPROVEMENTS:
  • Jobs now start executing after application startup completes successfully
  • Support strongly-typed configuration of IDbProvider
  • Add MSSQL Script compatible with SQL 2014 and 2012
  • Added usage of DisallowConcurrentExecutionAttribute for interfaces
  • Multiple performance improvements
  • Increase precision of SimpleTriggerImpl to ticks.
  • Switch from FAKE to NUKE
  • QuartzHostedService now has jobs start after application startup
  • QuartzHostedServiceOptions can let jobs be started as part of application startup, as before this version
  • Add helper methods to setup Microsoft.Data.Sqlite
  • Quartz will scan job and trigger listeners from MS DI container automatically
  • BREAKING CHANGES:
  • Quartz.OpenTelemetry.Instrumentation is now obsolete as there is contrib package OpenTelemetry.Instrumentation.Quartz on OT side
  • .NET Framework minimum version is 4.6.2 (previously 4.6.1)
  • NEW CONTRIBUTORS:
  • @zihotki made their first contribution in
  • @justmara made their first contribution in
  • @kolpav made their first contribution in
  • @Kuznetsov-Alexey made their first contribution in
  • @CodeDrop made their first contribution in
  • @Pifanjr made their first contribution in
  • @Strandinator made their first contribution in
  • @aschuhde made their first contribution in
  • @qzavyer made their first contribution in
  • @marceloceccon made their first contribution in
  • @Suchiman made their first contribution in
  • @bencyoung-Fignum made their first contribution in

New in Quartz.NET 3.3.3 (Aug 1, 2021)

  • FIXES:
  • Lock 'TRIGGER_ACCESS' attempt to return by: de9325af-3e1c-4ae9-a99b-24be994b75f4 -- but not owner! (#1236)
  • ScheduleJob shorthand: Job name should match trigger name by default (#1211)
  • CronTriggerImpl.WillFireOn returns wrong result when TimeZone is specified (#1187)
  • Race condition in DI scheduler listener initialization (#1117)
  • JobRunShell handle Job CancellationToken (#1183)
  • Restore System.Data.SqlClient support on .NET Core (#1181)
  • IMPROVEMENTS:
  • Replace static loggers with instance-based (#1264)
  • Expose more configuration options via programmatic APIs (#1263)
  • Add ConfigureScope extension point to MicrosoftDependencyInjectionJobFactory (#1189)
  • Update StdAdoConstants.cs (#1186)
  • Use custom InstantiateType for all instantiations in StdSchedulerFactory (#1185)
  • Add support for the ISchedulerFactory.StartDelayed in the QuartzHostedService (#1166)
  • Remove SimpleThreadPool from examples? (#1230)

New in Quartz.NET 3.3.2 (Apr 10, 2021)

  • This release returns the possibility to resolve jobs from Microsoft DI container. Now container is checked first and if not found then
  • ActivatorUtilities is used to construct the type with constructor injection support. Now both AllowDefaultConstructor and CreateScope have
  • been obsoleted as behavior is now either via DI construction or ActivatorUtilities and scope is always created to prevent resource leaks / double disposal.
  • Also a problem with host name resolution under WSL2 scenario was fixed.
  • FIXES:
  • Try resolving jobs from service provider before resorting to ActivatorUtilities (#1159)
  • Can't get hostname on WSL2+docker host network (#1158)

New in Quartz.NET 3.3.1 (Apr 8, 2021)

  • Remove PublicSign property from csproj (#1155)

New in Quartz.NET 3.3.0 (Apr 8, 2021)

  • BREAKING CHANGES:
  • Activity source listener is not longer part of net461 build, only net472
  • Quartz.AspNetCore integration package minimum .NET Core version is now 3.1 for HealthChecks support
  • NEW FEATURES:
  • Separate build configuration for .NET Framework 4.7.2
  • OpenTelemetry integration upgraded to target OpenTelemetry 1.0.0-rc1.1
  • Ported JobInterruptMonitorPlugin from Java version which allows automatic interrupt calls for registered jobs (#1110)
  • Rewrite semaphore implementations (#1115)
  • UsingJobData now has Guid and char overloads (#1141)
  • Add a regular AddJob(Type) (#1090)
  • FIXES:
  • Jobs not firing after upgrade to 3.2.x (from 3.0.7) on Microsoft Server 2008 R2 (#1083)
  • Jobs are not fired (#1072)
  • MicrosoftDependencyInjectionJobFactory does not inject job properties for scoped jobs (#1106)
  • XSD schema no longer requires defining durable element if you just want to define recover (#1128)
  • Stack trace logging fixed in case of reporting invalid lock acquire (#1133)
  • Disposable job is disposed twice when using UseMicrosoftDependencyInjectionScopedJobFactory (#1120)
  • QuartzHostedService.StopAsync throws NullReferenceException if StartAsync hasn't been run (#1123)

New in Quartz.NET 3.2.4 (Jan 20, 2021)

  • FIXES:
  • JobRunShell silently handles OperationCanceledException which is not correct in terms of job retry handling (#1064)
  • Handled exceptions thrown while retrieving the misfired trigger (#1040)
  • FileScanJob is faling after upgrading from 3.0.7 to 3.2.3 (#1027)
  • JobBuilder.UsingJobData(string key, string value) should be JobBuilder.UsingJobData(string key, string? value) (#1025)

New in Quartz.NET 3.2.3 (Oct 31, 2020)

  • NEW FEATURE:
  • Add Quartz.OpenTracing support (#1006)
  • Add UseZeroSizeThreadPool to configuration (#1003)
  • FIXES:
  • Xamarin Android can't get scheduler (#1008)
  • Autofac job factory registration fails (#1011)

New in Quartz.NET 3.2.2 (Oct 19, 2020)

  • This release addresses regression in scoped job resolution which was introduced by job factory refactoring done in 3.2.1.
  • FIXES:
  • Fix scoped job resolution (#998)

New in Quartz.NET 3.2.1 (Oct 18, 2020)

  • FIXES:
  • Make QuartzOptions Triggers and JobDetails public (#981)
  • Fix configuration system injection for dictionary/quartz.jobStore.misfireThreshold in DI (#983)
  • XMLSchedulingDataProcessor can cause IOException due to file locking (#993)
  • IMPROVEMENTS:
  • Unify MS dependency injection job factory logic and configuration (#995)
  • Improve job dispatch performance to reduce latency before hitting Execute (RAMJobStore) (#996)

New in Quartz.NET 3.1.0 Beta 3 (Jul 21, 2020)

  • NEW FEATURE:
  • Upgrade MySqlConnector to 1.0 (namespace has changed) (#890)
  • Support Microsoft.Extensions.Logging.Abstractions (#756)
  • Support Microsoft.Data.SQLite with full framework (#893)
  • Support custom calendar JSON serialization (#697)
  • FIXES:;
  • Remove internal dependencies from examples (#742)
  • Properly assign MaxConcurrency in CreateVolatileScheduler (#726)

New in Quartz.NET 3.1.0 Beta 2 (Jul 16, 2020)

  • NEW FEATURE:
  • DI configuration now supports adding scheduler, job and trigger listeners (#877)
  • DI configuration now processes appsettings.json section "Quartz" looking for key value pairs (#877)
  • Use Microsoft.Data.SqlClient as SQL Server connection library (#839)
  • FIXES:
  • Fix potential scheduler deadlock caused by changed lock request id inside ExecuteInNonManagedTXLock (#794)
  • Ensure NuGet.exe is part of produced zip to ensure build works (#881)
  • JobDataMap with enum values persisted as JSON can now be set back to job members via PropertySettingJobFactory (#770)
  • Ensure GetScheduleBuilder for triggers respects IgnoreMisfirePolicy (#750)
  • Remove cron expression validation from XML schema and rely on CronExpression itself (#729)

New in Quartz.NET 3.1.0 Beta 1 (Jul 8, 2020)

  • BREAKING CHANGES:
  • Minimum supported .NET Full Framework is now 4.6.1
  • NEW FEATURE:
  • Microsoft DI integration via package Quartz.Extensions.DependencyInjection (also allows briding to Microsoft Logging)
  • ASP.NET Core / Hosting integration and health checks via revisited NuGet package Quartz.AspNetCore (thank you zlzforever for contributing the work)
  • Introduced a config parameter ClusterCheckinMisfireThreshold (#692)
  • Giving meaningful names to examples folders (#701)
  • Added search patterns/sub directory search to directoty scanner job (#411, #708)
  • Fluent interface for scheduler configuration (#791)
  • Support every nth week in cron expression (#790)
  • Enable SQLite job store provider for NetStandard (#802)
  • Add configurable params for StdRowLockSemaphore for Failure obtaining db row lock
  • SchedName added to queries as sql paramteter (#818)
  • Server, example and test projects upgraded to user .NET Core 3.1
  • Nullable reference type annotations have been enabled
  • Symbols are now provided as a separate NuGet symbol package (snupkg)
  • SQL Server indexes have been fine-tuned, redudancies were removed and you can follow the current scripts to update to latest version of them
  • FIXES:
  • Allow binary serialization for DirectoryScanJob data (#658)
  • LibLog - Fixed NLog + Log4net callsite. Added support for NLog structured logging. Optimized Log4net-logger (#705)
  • Upgrade LibLog to latest version (#749)
  • RAMJobStore performance improvements (#718, #719, #720)
  • General performance improvements (#725, #723, #727)
  • GetTimeBefore() and GetFinalFireTime() should throw NotImplementedException instead of returning null (#731)
  • Switch to official TimeZoneConverter NuGet package (#739)
  • Remove invalid TimeSpanParseRule.Days (#782)
  • Update tables_sqlServer.sql to follow current SQL syntax and structures (#787)
  • Fix China Standard Time mapping in TimeZoneUtil.cs (#765)
  • Release BLOCKED triggers in ReleaseAcquiredTrigger (#741 #800)
  • DailyTimeIntervalTrigger failed to set endingDailyAfterCount = 1
  • CronTrigger: cover all valid misfire policies, and provide a sensible default and logging when seeing an invalid one

New in Quartz.NET 3.0.7 (Oct 8, 2018)

  • NEW FEATURE:
  • Add .NET Core 2.1 version of example server (#682)
  • New plugin Quartz.Plugins.TimeZoneConverter which allows usage of TimeZoneConverter library (#647)
  • FIXES:
  • Added transient codes from EF into new JobStore (#681)
  • Parametrized queries produced by ReplaceTablePrefix should be cached (#651)
  • Use TypeNameHandling.Auto for JsonObjectSerializer (#621)
  • Fix a race condition that could cause duplicate trigger firings (#690)
  • ISchedulerListener.JobScheduled not called when scheduling multiple jobs (ScheduleJobs) (#678)

New in Quartz.NET 3.0.6 (Jul 6, 2018)

  • NEW FEATURE:
  • Add SourceLink support (#642)
  • Make JobInterrupted method virtual in class SchedulerListenerSupport (#631)
  • FIXES:
  • Trigger group can be left as paused when all triggers have been removed (#641)
  • PlatformNotSupportedException on RaspberryPi (Windows IoT) (#630)
  • JSON serialisation returning defaults for derived calendar settings (#634)
  • .NET Core version not able to recover from DB connection drops (#637)

New in Quartz.NET 3.0.5 (May 28, 2018)

  • NEW FEATURE:
  • Support Oracle.ManagedDataAccess.Core (#609)
  • FIXES:
  • Trigger loop encountered using DailyTimeIntervalTrigger across DST start boundary (#610)
  • Missing ConfigureAwait(false) in some parts of code (#618)

New in Quartz.NET 3.0.4 (Mar 4, 2018)

  • This release fixes a nasty memory leak caused by QuartzSchedulerThread sharing
  • its CancellationTokenSource with calls it makes. Everyone using 3.x is advised to upgrade.
  • FIXES:
  • Memory leak caused by CancellationTokenSource sharing (#600)
  • tables_oracle.sql should use NUMBER(19) instead of NUMBER(13) for long properties (#598)

New in Quartz.NET 3.0.3 (Feb 24, 2018)

  • FIXES:
  • XML scheduling requires write access to source XML file (#591)
  • Improve listener error handling (#589)
  • SQL command parameters are not defined in ‘IsTriggerStillPresent’ method (#579)
  • Source distribution couldn’t be built with build.cmd/.sh when no .git directory present (#596)
  • Currently executing jobs cannot be retrieved via remoting (#580)

New in Quartz.NET 3.0.2 (Feb 24, 2018)

  • FIXES:
  • Mark ReadOnlyCompatibleHashSet as serializable (#576)

New in Quartz.NET 3.0.1 (Jan 23, 2018)

  • FIXES:
  • Create zip package as part of release, including Quartz.Server (#572)
  • A specific CronExpression fails with “Input string was not in a correct format.” (#568)
  • Cannot use remoting due to Task and CancellationToken signatures (#571)

New in Quartz.NET 3.0 (Jan 23, 2018)

  • NEW FEATURE:
  • Task based jobs with async/await support, internals work in async/await manner
  • Support .NET Core / netstandard 2.0 and .NET Framework 4.5.2 and later
  • Support for Microsoft.Data.Sqlite via provider name SQLite-Microsoft, the old provider SQLite also still works
  • Added preliminary support for SQL Server Memory-Optimized tables and Quartz.Impl.AdoJobStore.UpdateLockRowSemaphoreMOT
  • Common.Logging removed from dependencies
  • C5 Collections removed from ILMerge process, no longer needed
  • Add support for eager validation of job scheduling XML file on plugin start
  • Add support for extra custom time zone resolver function in TimeZoneUtil
  • BREAKING CHANGES:
  • Jobs and plugins are now in a separate assemblies/NuGet packages Quartz.Jobs and Quartz.Plugins
  • ADO.NET provider names have been simplified, the provider names are without version, e.g. SqlServer-20 => SqlServer
  • API methods have been revisited to mainly use IReadOnlyCollection, this hides both HashSets and Lists
  • LibLog has been hidden as internal (ILog etc), like it was originally intended to be
  • SimpleThreadPool is gone, old owned threads are gone
  • Scheduler methods have been changed to be Task based, remember to await them
  • IJob interface now returns a task
  • Some IList properties have been changed to IReadOnlyList to properly reflect intent
  • SQL Server CE support has been dropped
  • DailyCalendar uses now datetimes for excluded dates and has ISet interface to access them
  • IObjectSerializer has new method, void Initialize(), that has to be implemented
  • IInterruptableJob removed in favor of context’s CancellationToken

New in Quartz.NET 2.6.1 (Oct 9, 2017)

  • NEW FEATURE:
  • Allow performing misfire handling more frequently than misfireThreshold (#532)
  • FIXES:
  • Incomplete recovery of misfired jobs when using database-specific delegate types (#531)

New in Quartz.NET 2.6 (Jul 31, 2017)

  • NEW FEATURE:
  • Add support for eager validation of job scheduling XML file on plugin start (#492)
  • Add support for extra custom time zone resolver function in TimeZoneUtil (#290)
  • FIXES:
  • CalendarIntervalTrigger’s first fire time doesn’t consider time zone (#505)
  • QRTZ_FIRED_TRIGGERS.ENTRY_ID column length too small (#474)
  • Decrease log level for message when host name is too long (#471)
  • Quartz should not log transient faults related to azure db connection as errors (#470)
  • RemotingSchedulerExporter can’t create remoting channel on Mono (#464)
  • Regression in 2.5, TriggerBuilder.UsingJobData(JobDataMap newJobDataMap) should ovewrite existing (#460)
  • QuartzScheduler.Clear does not clear QRTZ_FIRED_TRIGGERS table (#437)
  • No wait time between db connection failures with AcquireNextTriggers (#428)
  • DailyTimeIntervalTriggerImpl prevents altering EndTimeOfDay to a later time of day (#382)
  • Quartz.CronExpression.IsSatisfiedBy claims to ignore milliseconds but doesn’t (#349)
  • Add back PostgreSqlDelegate to support database LIMIT in trigger acquiring (#318)
  • Bug in XSD schema: cannot set IgnoreMisfirePolicy (#280)
  • Quartz.Xml.XMLSchedulingDataProcessor uses GetType() instead of typeof(Quartz.Xml.XMLSchedulingDataProcessor) (#277)
  • With SQLite default isolation level should be set to serializable (#242)
  • DailyTimeIntervalTrigger’s time zone is not persisted into database (#136)
  • XMLSchedulingDataProcessorPlugin incompatible with StdAdoDelegate when useProperties=true (#44)
  • Trigger loop encountered using DailyTimeIntervalTrigger across DST start boundary (#332)

New in Quartz.NET 2.5 (Feb 23, 2017)

  • FIXES:
  • Jobs get stuck in the Blocked state after the DB connection is lost in NotifyJobListenersComplete (#282)
  • Oracle rownum based queries can work wrong after Oracle SQL tuning task has ran (#413)
  • Handle DST better (#317)
  • RAMJobStore fails to resume when paused without triggers (#433)
  • CronExpression doesn’t properly check the range when an “/interval” is specified (#432)
  • Fix JobDataMap dirty flag when constructing from existing map (#431)
  • Store triggers by job in RAMJobStore for better performance (#430)
  • Create WorkerThread in virtual method (#426)
  • SqlSelectJobForTrigger is not using primary key join and causes index scan (#407)

New in Quartz.NET 2.4 (Aug 18, 2016)

  • NEW FEATURE:
  • Add SQL limit support for MySQLDelegate
  • Removed dbFailureRetryInterval since it is no longer used
  • Update Common Logging to v3.3.1
  • FIXES:
  • Batch acquisition can cause early firing of triggers
  • Should not rely on C5.TreeSet on HolidayCalendar field serialization

New in Quartz.NET 2.3.2 (Mar 31, 2015)

  • NEW FEATURE:
  • Add mysql 6.9.5 provider support
  • FIXES:
  • Avoid unnecessary object allocations in CronExpression
  • CalendarIntervalTrigger and DailyTimeIntervalTrigger produce incorrect schedule builders
  • Incorrect multiplication factor in DailyTimeIntervalScheduleBuilder.EndingDailyAfterCount()
  • AnnualCalendar SetDayExcluded does not update internal data structures if base calendar excludes date
  • Ensure IDriverDelegate members in StdAdoDelegate are virtual
  • Several XML documentation spelling error fixes

New in Quartz.NET 2.3.1 (Jan 29, 2015)

  • NEW FEATURE:
  • Upgrade to Common.Logging 3.0.0
  • FIXES:
  • JobDetailImpl members should be virtual
  • Triggers do not transition to error state in AdoJobStore when job retrieval fails during trigger acquisition
  • Quartz.Server.exe.config refers to wrong Common.Logging.Log4Net assembly
  • Incorrect NextFireTime when 'schedule-trigger-relative-to-replaced-trigger' = 'true'
  • Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly mscorlib
  • TriggerBuilder.UsingJobData(JobDataMap newJobDataMap) should ovewrite existing data

New in Quartz.NET 2.3 (Nov 10, 2014)

  • NEW FEATURE:
  • Upgrade to Common.Logging 2.3.1
  • Add ability to check if calendar exists in job store
  • Add FirebirdDelegate and update Firebird driver
  • FIXES:
  • DailyTimeIntervalTriggerImpl fires twice during daylight saving time day
  • No wait time between db connection failures with AcquireNextTriggers causes excessive logging
  • Configure the quartz server in the section fails
  • CronExpression ctor incorrectly uses the non-uppercased string
  • Triggers fired milliseconds too early
  • Loading of Quartz 4.0 DLL fails on systems with no .NET 4.5 installed

New in Quartz.NET 2.2.4 (Jul 28, 2014)

  • FIXES:
  • Cannot register trigger persistence delegates with assembly qualified names
  • Set example server's current directory to the one where server.exe is
  • Fix TimeZoneInfo.GetUtcOffset(DateTimeOffset dateTimeOffset) not implemented in Mono
  • Gracefully handle mixed useProperties usage when reading from DB when useproperties value has changed
  • FindSystemTimeZoneById should work with both 'Coordinated Universal Time' and 'UTC'
  • Latest release (2.2.3) didn't include Dbprovider constant string in StdSchedulerFactory - running examples fails

New in Quartz.NET 2.2.3 (Apr 2, 2014)

  • FIXES:
  • StdAdoConstants.SqlSelectSchedulerStates does not filter on the SCHED_NAME column
  • CalendarIntervalTrigger produces incorrect schedule
  • Trigger completion signaling from AdoJobStore does not work properly when DisallowConcurrentExecution is set
  • NEW FEATURES:
  • IDisposable jobs should be disposed after execution
  • Support for defining DbMetadata via App.config's quartz section

New in Quartz.NET 2.2.2 (Feb 10, 2014)

  • FIXES:
  • long properties incorrectly read as int in SimplePropertiesTriggerPersistenceDelegateSupport
  • RecoveringTriggerKey in JobExecutionContext has group and name wrong way around
  • Make SQL Server table create script Azure SQL compliant
  • Add missing clustered index for QRTZ_BLOB_TRIGGERS table ** You need to manually add this to existing installation (tables created with old script), see ALTER TABLE [dbo].QRTZ_BLOB_TRIGGERS WITH NOCHECK ADD... in script

New in Quartz.NET 2.2.1 (Nov 25, 2013)

  • NEW FEATURES:
  • GroupMatcher.AnyGroup() support
  • Add network credential and SMTP port definition support to SendMailJob
  • FIXES:
  • SchedulerException constructor unnecessarily uses Exception.ToString as message
  • Thread name prefix for thread pool is not set
  • Triggers should not be excluded based on the fire time of the first selected trigger
  • Quarts server does not properly log possible exception when starting the service
  • DailyTimeIntervalTrigger GetFireTimeAfter produces incorrect result when date is in the past
  • batchTriggerAcquisitionMaxCount acquires one trigger unless batchTriggerAcquisitionFireAheadTimeWindow is also set
  • Oracle ODP Managed provider should set BindByName to true for OracleCommands

New in Quartz.NET 2.2 (Sep 19, 2013)

  • BREAKING CHANGES:
  • database schema needs upgrade
  • add SchedulerStarting() method to ISchedulerListener interface
  • make the scheduler's TypeLoadHelper available to plugins when they are initialized
  • dbFailureRetryInterval parameter was removed from DirectSchedulerFactory APIs
  • NEW FEATURES:
  • ability to override worker thread names (when using SimpleThreadPool)
  • add new IScheduler method: ScheduleJob(IJobDetail job, ISet trigger) to schedule multiple triggers for a job all at once
  • allow 'triggerless' initial storing of non-durable jobs.
  • improvements for job recovery information
  • package job_scheduling_data_2_0.xsd to nuget package's content folder
  • allow scheduler exported with remoting to be used from local machine only
  • support for Oracle managed ODP driver
  • FIXES:
  • job ending with exception and trigger not going to fire again, trigger is incorrectly not removed from job store
  • XML schema supports multiple schedule elements but processor does not
  • DailyTimeIntervalTriggerPersistenceDelegate does not handle empty time interval properly
  • DailyTimeIntervalScheduleBuilder.EndingDailyAfterCount(...) doesn't pass validation
  • trace throwing exception
  • bug in QuartzSchedulerThread.GetRandomizedIdleWaitTime()
  • can't delete or replace job without the referenced class
  • MISC:
  • Performance improvements, including improvements to some select statements in AdoJobStore