QuartzNet v3.1.0 Release Notes

Release Date: 2020-07-24 // almost 4 years ago
  • ๐Ÿš€ This release concentrates on performance and bringing support to de facto Microsoft libraries like dependency injection and ASP.NET Core hosting. A big change is that now SQL queries use parametrized scheduler name, which allows database server to reuse query plans and use indexes more optimally. This will help especially clusters which have large number of nodes. The SQL server indexes were also revisited and their amount reduced by using smarter covering indexes.

    ๐Ÿ”’ There is also a very important bug fix present for lock handling on retries. There was a possibility for a deadlock in database lock handling in some situations.

    ๐Ÿ’ฅ BREAKING CHANGES

    • ๐Ÿ‘ minimum supported .NET Full Framework is now 4.6.1
    • ๐Ÿ”„ changed SQL commands format in Quartz.Impl.AdoJobStore.JobStoreSupport (see also #818). Affected are only schedulers that use customized configurations of SQL commands in Quartz.Impl.AdoJobStore.JobStoreSupport, e.g. SelectWithLockSQL. Migration example:

      <!-- Quartz <=3.0.7 --><item key="quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS WITH (UPDLOCK,ROWLOCK) WHERE SCHED_NAME = {1} AND LOCK_NAME = @lockName</item><!-- Quartz >=3.1.0 --><item key="quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS WITH (UPDLOCK,ROWLOCK) WHERE SCHED_NAME = @schedulerName AND LOCK_NAME = @lockName</item>

    ๐Ÿ†• NEW FEATURE

    • ๐Ÿ“ฆ Microsoft DI integration via package Quartz.Extensions.DependencyInjection (also allows bridging to Microsoft Logging)
    • โฑ 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)
    • โž• Add diagnostics source and OpenTelemetry support (#901)
    • ๐Ÿ‘‰ Use Microsoft.Data.SqlClient as SQL Server connection library (#839)
    • ๐Ÿ“ฆ 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 directory 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 parameter (#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, redundancies were removed and you can follow the current scripts to update to latest version of them
    • โฌ†๏ธ 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)
    • โฑ 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

    • ๐Ÿ‘ 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
    • โœ‚ Remove internal dependencies from examples (#742)
    • โฑ Properly assign MaxConcurrency in CreateVolatileScheduler (#726)
    • ๐Ÿ›  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)