quartznet

Quartz Enterprise Scheduler .NET

APACHE-2.0 License

Stars
6.3K
Committers
187

Bot releases are hidden (Show)

quartznet - Quartz.NET 3.2.2

Published by lahma about 4 years ago

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)
quartznet - Quartz.NET 3.2.1

Published by lahma about 4 years ago

This is a maintenance release containing mostly bug fixes.

MS dependency injection job factory configuration was unified and you can now configure relevant options
like whether to create a separate scope with using just the UseMicrosoftDependencyInjectionJobFactory and its callback.
Now scoped jobs also get their properties set from job data map.

Pre-configuring Quartz options from appsettings.json with services.Configure<QuartzOptions>(Configuration.GetSection("Quartz"));
now also works as expected.

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)
quartznet - Quartz.NET 3.2.0

Published by lahma about 4 years ago

This release concentrates on tweaking the DI story and fixing some found dependency issues.

Now Quartz no longer has hard dependency on Microsoft.Data.SqlClient, you need to add that dependency to your project
if you are using Microsoft SQL Server as backing store for your project. Now requirement is in line with other providers/drivers.

There's also important fix for SQL Server where varying text parameter sizes caused query plan pollution.

BREAKING CHANGES

  • Remove dependency on Microsoft.Data.SqlClient (#912)
  • LogContext moved from Quartz namespace to Quartz.Logging namespace (#915)
  • For Full Framework, System.Data.SqlClient is again the default provider, Microsoft.Data can be used via provider MicrosoftDataSqlClient (#916)

NEW FEATURE

  • Introduce separate Quartz.Extensions.Hosting (#911)
  • You can now schedule job and trigger in MS DI integration with single .ScheduleJob call (#943)
  • Support adding calendars to MS DI via AddCalendar<T> (#945)

FIXES

  • Revert change in 3.1: CronExpression/cron trigger throwing NotImplementedException when calculating final fire time (#905)
  • Use 2.1 as the minimum version for the .NET Platform Extensions (#923)
  • ServiceCollection.AddQuartz() should register default ITypeLoadHelper if none supplied (#924)
  • SqlServer AdoJobStore SqlParameter without text size generates pressure on server (#939)
  • DbProvider initialization logic should also read quartz.config (#951)
  • LoggingJobHistoryPlugin and LoggingTriggerHistoryPlugin names are null with IoC configuration (#926)
  • Improve options pattern to allow better custom configuration story (#955)
quartznet - Quartz.NET 3.1.0

Published by lahma about 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)
quartznet - Quartz.NET 3.1.0 beta 3

Published by lahma about 4 years ago

Read the beta 1 release notes and beta 2 release notes to know more.

Known Issues

The documentation for the new integration features is still being worked on.

GitHub Issues

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)
quartznet - Quartz.NET 3.1.0 beta 2

Published by lahma over 4 years ago

This release builds on top of beta 1 adding more fixes and improvements. Read the beta 1 release notes to know more.

Known Issues

The documentation for the new integration features is still being worked on.

GitHub Issues

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)
quartznet - Quartz.NET 3.1.0 beta 1

Published by lahma over 4 years ago

Support for ASP.NET Core Dependency Injection and Hosted Services

You can find the revisited packages as:

I would like to thank both Facundo Glaeser and Lewis Zou for working with the new integration packages and their logistics.

The best resouce the see the new DI integration in progress is to head to the example ASP.NET Core application.

Index and query performance improvements

A big change on the persistent store side 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.

See the updated create index definition for more details.

There are also some minor bug fixes present.

Known Issues

The documentation for the new integration features is still being worked on.

GitHub Issues

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
quartznet - Quartz.NET 3.0.7

Published by lahma about 6 years ago

This release brings .NET Core 2.1 version of example server and adds new plugin
Quartz.Plugins.TimeZoneConverter which allows usage of TimeZoneConverter library to get consistent time zone id parsing between
Linux and Windows.

There are also some bug fixes related to AdoJobStore.

NEW FEATURE

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)
quartznet - Quartz.NET 3.0.6

Published by lahma over 6 years ago

This release fixes a nasty bug with JSON calendar database serialization and .NET Core SQL Server client libraries
have been updated to mitigiate possible hangs when connection drops occur.

Also some other minor bugs have been also addressed.

You should now be able to debug into Quartz.NET sources with added SourceLink support.

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)
quartznet - Quartz.NET 3.0.5

Published by lahma over 6 years ago

This release fixes couple bugs and adds support for .NET Core version of Oracle's managed data access library.

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)
quartznet - Quartz.NET 2.6.2

Published by lahma over 6 years ago

This is a maintenance release fixing some bugs.

FIXES

  • trigger loop encountered using DailyTimeIntervalTrigger across DST start boundary (#610)
  • tables_oracle.sql should use NUMBER(19) instead of NUMBER(13) for long properties (#598)
  • XML scheduling requires write access to source XML file (#591)
quartznet - Quartz.NET 3.0.4

Published by lahma over 6 years ago

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)
quartznet - Quartz.NET 3.0.3

Published by lahma over 6 years ago

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)
quartznet - Quartz.NET 3.0.2

Published by lahma over 6 years ago

This is a minor fix release that fixes single issue that still prevented full usage of remoting.

FIXES

  • Mark ReadOnlyCompatibleHashSet as serializable (#576)
quartznet - Quartz.NET 3.0.1

Published by lahma over 6 years ago

This is a bug fix release that fixes cron expression parsing bug and reverts IRemotableQuartzScheduler
interface back to its original form without Tasks and CancellationTokens - so that's it's actually usable
through .NET Remoting infrastructure. Now zip packing is also back and includes Quartz.Server.

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)
quartznet - Quartz.NET 3.0

Published by lahma almost 7 years ago

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

KNOWN ISSUES

  • Issues with time zone ids between Windows and Linux, they use different ids for the same zone
  • No remoting support for .NET Core
quartznet - Quartz.NET 2.6.1

Published by lahma about 7 years ago

This is a maintenance release fixing an issue where misfire handling is being too slow at times.

NEW FEATURE

  • Allow performing misfire handling more frequently than misfireThreshold (#532)

FIXES

  • Incomplete recovery of misfired jobs when using database-specific delegate types (#531)
quartznet - Quartz.NET 3.0 Beta 1

Published by lahma about 7 years ago

This is the first beta of v3. Stabilization and testing has been well underway.

When using AdoJobStore: make sure to run both 2.6 and 3.0 SQL migration scripts if you are upgrading from 2.5, otherwise just 3.0 migration script

NEW FEATURE

  • returned .NET Framework 4.5.2 compatibility to better support library consumers like NServiceBus and MassTransit
  • netstandard 2.0 is now minimum for .NET Core
  • support for Microsoft.Data.Sqlite via provider name SQLite-Microsoft, the old provider SQLite also still works
  • Firebird is supported in .NET Core
  • Added preliminary support for SQL Server Memory-Optimized tables and Quartz.Impl.AdoJobStore.UpdateLockRowSemaphoreMOT

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

KNOWN ISSUES

  • Issues with time zone ids between Windows and Linux, they use different ids for the same zone
  • No remoting support for .NET Core
  • Documentation lacking

Check NuGet for pre-release packages.

quartznet - Quartz.NET 3.0 Alpha 3

Published by lahma about 7 years ago

NEW FEATURE

  • support for .NET Standard 2.0 preview (#486)
  • support for MySQL on .NET Standard via provider 'MySql' (#493)
  • change SQL database IMAGE types to VARBINARY - requires migration schema_26_to_30.sql
  • add ISchedulerListener.JobInterrupted(JobKey jobKey, CancellationToken cancellationToken) (#467)

FIXES

  • fix PosgreSQL db provider configuration for .NET Core (#449)
  • CancellationToken is now supported in async methods (#444)
  • fix regression with XML schema validation

BREAKING CHANGES

  • possibly breaking, cron expression validation is now stricter (#315 #485)
  • .NET 4.6 required instead of old 4.5
  • 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
quartznet - Quartz.NET 2.6

Published by lahma about 7 years ago

Addition of column required to database

A slight performance boost can also be unlocked when using PostgreSQL by switching PostgreSqlDelegate.

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)
Package Rankings
Top 3.94% on Proxy.golang.org
Badges
Extracted from project README
Downloads Build status NuGet NuGet pre-release MyGet pre-release Join the chat at https://gitter.im/quartznet/quartznet
Related Projects