Skip to content

Bump Quartz, Quartz.Jobs and Quartz.Plugins#472

Merged
mark-hayward-erg merged 1 commit into
developfrom
dependabot/nuget/admin/multi-fd93939fc8
Apr 3, 2026
Merged

Bump Quartz, Quartz.Jobs and Quartz.Plugins#472
mark-hayward-erg merged 1 commit into
developfrom
dependabot/nuget/admin/multi-fd93939fc8

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot Bot commented on behalf of github Apr 3, 2026

Updated Quartz from 3.17.0 to 3.17.1.

Release notes

Sourced from Quartz's releases.

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

Commits viewable in compare view.

Updated Quartz.Jobs from 3.17.0 to 3.17.1.

Release notes

Sourced from Quartz.Jobs's releases.

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

Commits viewable in compare view.

Updated Quartz.Plugins from 3.17.0 to 3.17.1.

Release notes

Sourced from Quartz.Plugins's releases.

3.17.1

Highlights

Jenkins-style H (hash) token for cron expressions

Quartz.NET now supports the H (hash) token in cron expressions, inspired by Jenkins. The H token resolves to a deterministic value based on the trigger's identity, spreading job execution times to avoid the thundering herd problem when many triggers share the same schedule.

Supported forms: H, H(min-max), H/step, H(min-max)/step

// Runs at a consistent but spread-out minute each hour
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H * * * ?")
    .Build();

// Runs every 15 minutes, starting at a hash-determined offset
trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "myGroup")
    .WithCronSchedule("0 H/15 * * * ?")
    .Build();

The hash seed is automatically derived from the trigger's identity (name + group) when using TriggerBuilder, or can be provided explicitly. See the cron trigger documentation for full details.

Structured logging history plugins

New StructuredLoggingJobHistoryPlugin and StructuredLoggingTriggerHistoryPlugin provide first-class support for structured logging frameworks like Serilog and NLog. Unlike the existing logging plugins that use index-based format placeholders ({0}, {1}), these use named MEL-style message template parameters ({JobName}, {TriggerGroup}, etc.), making log output queryable in structured logging sinks and avoiding template cache memory leaks.

quartz.plugin.jobHistory.type = Quartz.Plugin.History.StructuredLoggingJobHistoryPlugin, Quartz.Plugins
quartz.plugin.triggerHistory.type = Quartz.Plugin.History.StructuredLoggingTriggerHistoryPlugin, Quartz.Plugins

Message templates are fully configurable via standard Quartz property configuration.

Bug Fixes

  • Fix triggers getting permanently stuck in ACQUIRED state — Triggers could become permanently stuck if the scheduler crashed or was killed between acquiring a trigger and firing it. (#​2980)
  • Fix StoreCalendar overriding paused trigger state — Storing a calendar with updateTriggers: true no longer resets paused triggers back to normal state. (#​2968)
  • Fix DoCheckin not retrying transient database errors — Cluster checkin now properly retries on transient database failures instead of silently failing. (#​2970)
  • Fix Dashboard /_blazor endpoint conflict — The Quartz Dashboard no longer conflicts with host applications that also use Blazor. (#​2975)
  • Fix spurious ERROR log on zombie transaction rollback — Rolling back a zombie transaction no longer logs a misleading ERROR. (#​2978)

Full Changelog: quartznet/quartznet@v3.17.0...v3.17.1

Commits viewable in compare view.

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps Quartz from 3.17.0 to 3.17.1
Bumps Quartz.Jobs from 3.17.0 to 3.17.1
Bumps Quartz.Plugins from 3.17.0 to 3.17.1

---
updated-dependencies:
- dependency-name: Quartz
  dependency-version: 3.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Quartz.Jobs
  dependency-version: 3.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: Quartz.Plugins
  dependency-version: 3.17.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added .NET Pull requests that update .NET code dependencies This task relies on an external source labels Apr 3, 2026
@dependabot dependabot Bot mentioned this pull request Apr 3, 2026
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Apr 3, 2026

@mark-hayward-erg mark-hayward-erg merged commit 3dc096b into develop Apr 3, 2026
3 checks passed
@dependabot dependabot Bot deleted the dependabot/nuget/admin/multi-fd93939fc8 branch April 3, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies This task relies on an external source .NET Pull requests that update .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant