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