Quartz Enterprise Scheduler .NET
Quartz.NET is a full-featured, open source job scheduling system that can be used from smallest apps to large scale enterprise systems.
Quartz.NET is a pure .NET library written in C# and is a port of very popular open source Java job scheduling framework, Quartz. This project owes very much to original Java project, it’s father James House and the project contributors.
Quartz.NET 3.0 Beta 1 Released
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.
Quartz.NET 3.0 Alpha 3 Released
This is the third alpha of v3. APIs have had some love in form of adding CancellationToken support and
using more IReadOnlyCollection
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
- 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 HashSet s and List s - LibLog has been hidden as internal (ILog etc), like it was originally intended to be
KNOWN ISSUES
- Issues with time zone ids between Windows and Linux, they use different ids for the same zone
- No remoting support
- Documentation lacking
Check NuGet for pre-release packages.
Quartz.NET 2.6 Released
Addition of column required to database
- This release fixes a long standing issue, DailyTimeIntervalTrigger’s time zone is now finally persisted to database
- This requires running schema_25_to_26_upgrade.sql to add new column to QRTZ_SIMPROP_TRIGGERS table
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)
Grab it from downloads page.
Quartz.NET 2.5 Released
This release contains mainly bug fixes but because there’s a behavioral change in DST handling (for the better) that warrants for a minor version number increment.
See the GitHub issue for details.
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)
Grab it from downloads page.
Quartz.NET 3.0 Alpha 2 Released
This is the second alpha of v3. This release fixes problems with schedule signaling when AdoJobStore is in use. This release removes the last bits of Quartz’s usage of thread local storage and thus makes async-based operations a lot safer.
FIXES
- fix scheduler signaling not working with AdoJobStore due to thread local storage
- thread local state removed altogether
- quartz.serializer.type was required even though non-serializing RAMJobStore was in use
- JSON serialization incorrectly called serialization callbacks
BREAKING CHANGES
- IStatefulJob was removed, been obsolete since 2.x
- ISemaphore interface now passes Guid requestorId that defines lock owner instead of implicit thread name
KNOWN ISSUES
- Issues with time zone ids between Windows and Linux, they use different ids for the same zone
- No remoting support
- Documentation lacking
Check NuGet for pre-release packages.
Quartz.NET 2.4.1 Released
Minor release that just makes Common.Logging 3.3.1 bound by compilation process and not just by NuGet version reference.
FIXES
- Fix Common.Logging version 3.3.1 to be a true binary reference instead of just NuGet dependency
Grab it from downloads page.
Quartz.NET 2.4 Released
Right on the heels of Quartz.NET 3.0 Alpha 1 we now have a small maintenance version. With version 2.4 we are slowing things down with 2.x series and concentrate effors on v3 development.
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
Grab it from downloads page.
Quartz.NET 3.0 Alpha 1 Released
This is the first alpha release from the long-awaited v3 branch. This is a big overhaul (and still in progress). Internals are being modernized whilst still trying to keep sane upgrade path.
A big thank you goes to Mike Rousos who really made it possible to get Quartz.NET working on .NET Core. Daniel Marbach also contributed a lot with ideas and code to async side. And of course never forgetting the community members that have provided feedback and fixes.
Please see the migration guide that is a work in progess.
Use at your own risk, might not be that production ready yet
What does alpha mean?
- All existing (and new) tests passing
- Cheese might still get moved, alpha means that APIs can change, features can come and go
NEW FEATURE
- Task based jobs with async/await support, internals work in async/await manner
- Support .NET Core / netstandard 1.3
- Separate NuGet package Quartz.Serialization.Json to enable JSON based AdoJobStore serialization (no binary serialization available in .NET Core)
- Common.Logging removed from dependencies
- C5 Collections removed from ILMerge process, no longer needed
BREAKING CHANGES
- .NET 4.5/netstandard1.3 required
- 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
- Documentation lacking
Check NuGet for pre-release packages.
Older news can be found from the news archive ».