Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

First identify where the duplication occurs: separate job records created for one event, two workers attempting the same stored job, a repeated external effect after a retry, or recurring executions that overlap or appear to be missing. Each has a different fix. JobRunr uses optimistic locking to coordinate processing of a stored job, but that does not deduplicate separate enqueue requests or make external side effects exactly once.

Identify which kind of duplicate or stuck job you have

Start with the dashboard and persisted job history. Count the job records and compare their IDs, arguments, states, and execution times against the logical event you expected to run once.

What you observe Likely layer What to investigate
Several job records for one message or event Producer / enqueue request Whether multiple listeners or nodes received the same event and each scheduled a job.
One stored job appears to have competing workers Storage claim / processing Server activity, job history, and storage-backed coordination. JobRunr documents optimistic locking for processing claims.
One job record, but an email, payment, or other effect happened twice Business side effect / retry Whether the process stopped after performing the effect but before recording job completion.
A recurring execution is missing, repeated, or overlapping Recurring schedule Stable recurring ID, downtime behavior, poll interval, timezone, and whether the previous run is still active.
A job stays in PROCESSING Worker, storage, or recovery Whether a server is alive and updating the job, storage is reachable, or a processing JVM stopped unexpectedly.

The dashboard can show states and failures, but an apparent duplicate in an external system may not correspond to multiple JobRunr records. Distinguish the job history from the downstream system’s own transaction or event history.

Prevent duplicate enqueueing at the producer

Make repeated event delivery converge on one job

When multiple load-balanced service-bus or JMS listeners can receive the same message, each listener may enqueue a separate job. Derive a stable identifier from the source event—such as its correlation ID—and use it in the scheduling path. The JobRunr FAQ describes this pattern for service-bus messages: JobRunr FAQ.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For a JobRunr Pro implementation, the enqueueing documentation describes JobIdentifier create-once behavior and enqueueOrReplace when the requirement is to retain the latest job for an identifier: JobRunr enqueueing jobs. Choose deliberately: create-once means a repeated event should not create another job, while replacement means a newer request can supersede the earlier pending work. These are Pro capabilities; do not assume those APIs are available in OSS. Check the API and behavior for the version you deploy.

Do not confuse enqueue deduplication with worker coordination

JobRunr states that it uses optimistic locking to make sure a stored job is only processed once. That addresses competing attempts to claim the same persisted job; it does not merge two jobs that were separately created for the same event. The distinction is central when diagnosing duplicates: fix repeated delivery at the producer boundary, rather than expecting worker locking to infer that two records mean the same business event.

Make retries safe for business effects

A job can perform an external action successfully and then stop before JobRunr records the job as complete. Recovery or retry can run the job again from the beginning. Graceful shutdown can also interrupt unfinished work, which may then be retried. JobRunr documents persistence and retry behavior in its introduction and deployment guidance.

Use an application-level idempotency key at the effect boundary, where the target API or system supports it. For example, pass a stable payment-operation key derived from the business transaction, or record an email-delivery event under a unique business key before sending. The key must identify the intended business action, not merely a particular attempt. If the downstream system offers no idempotency mechanism, use an application-side deduplication record or reconciliation process appropriate to the effect. This is engineering guidance for handling reruns, not a guarantee that JobRunr makes external effects exactly once.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Elan Publishing Company Class Record Book for 6-8 Weeks. 36 Names. Large Blocks (R6080)
  • 8 1/2 x 11 Teacher Record Book with Teacher's daily schedule
  • Special duties
  • Supplementary data sheets
  • Grade recording sheets for 40 weeks with shading every other two lines
  • Perforated grade recording sheets - write the class list only once

Audit recurring-job identity and schedule behavior

Keep registration IDs stable

Assign every recurring definition an explicit, stable ID. Reusing an ID updates its definition; registering the same schedule under a changed ID can leave the old definition in place and create another. When programmatic registration code is removed or renamed, explicitly remove obsolete definitions rather than assuming they disappear at startup. See the recurring jobs documentation.

Decide what should happen after downtime

In JobRunr OSS, recurring occurrences missed while all servers are down are skipped. The documented Pro catch-up feature can schedule skipped occurrences. Choose based on the task’s meaning: a periodic report may only need the next run, while a process that must account for every interval may need catch-up. Do not treat catch-up as a harmless default; it can create a burst of work after downtime.

Rank #4
Elan Publishing Company Class Record Book Unstructured. Set it up to Record Grades Your Way! 40 Student Names (Tree Seasons)
  • 8.5" x 11" Teacher Record Book
  • Designed with extra-large blocks for grades, etc
  • 3 Sections with 105 pages total
  • Each double page in section I and II has 31 horizontal squares, sufficient for a six week marking period

Check overlap and poll cadence

By default, JobRunr does not create a new recurring occurrence while the previous instance remains scheduled, enqueued, or processing. JobRunr Pro documents a configurable maxConcurrentJobs setting when bounded overlap is needed. The deployment guide gives a default poll interval of 15 seconds; it cautions that if polling is less frequent than a recurring interval, multiple instances may launch together to catch up. Check the interval against your most frequent schedule, as well as the schedule timezone and when registration runs. Verify version-specific behavior against the release you operate.

Diagnose a job that remains in PROCESSING

A long-running state is not by itself proof of a defect. The FAQ explains the IllegalThreadStateException message “Job was too long in PROCESSING state without being updated” as a case associated with stopping a JVM while it processes a job. Treat it as a clue to inspect the worker and recovery history, not as evidence that every long job is erroneous. See the FAQ.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
IF Bookaroo Bigger Things Notebook Journal - Aubergine
  • Bigger and bendier & friendlier notebook (25cm H x 19cm W)- flexible in every way
  • Lots of useful notebook features inside and out
  • With big pocket in the back and pen loop on the spine
  • Brilliant complementary colour combinations
  • Open the job’s history and failure details in the dashboard; compare its last state update with server activity and logs.
  • Confirm at least one BackgroundJobServer is enabled and active for processing, rather than only a dashboard or application instance.
  • Check storage connectivity, database availability, and whether server heartbeats and health information are current.
  • Review deployment logs for JVM termination, restarts, or shutdowns during processing.
  • Compare the job’s runtime with its normal workload and the deployed version’s processing/update behavior before changing thresholds.

JobRunr’s deployment guide covers server roles, health, metrics, and operational configuration: Deployment.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Set shutdown and capacity settings around the real bottleneck

Allow work to finish during deployment

Configure JobRunr’s shutdown wait and the orchestrator’s termination grace period so the process has time to finish active work. If the orchestrator kills the JVM first, unfinished jobs may be interrupted and retried. A longer grace period helps only when the job can complete within that window; jobs that routinely exceed it still need safe retry behavior.

Use polling for pickup latency, not as a throughput shortcut

A shorter poll interval can reduce the delay before a worker notices eligible work, but it increases database polling load and does not necessarily increase job throughput. Size worker count to the workload and database capacity, and check downstream API limits before adding workers or servers. Use metrics, logs, and health signals to tell a backlog from an inactive server or unreachable storage provider. The deployment guide documents the default 15-second poll interval and operational tuning considerations: JobRunr deployment.

Quick Recap

Bestseller No. 3
Elan Publishing Company Class Record Book for 6-8 Weeks. 36 Names. Large Blocks (R6080)
Elan Publishing Company Class Record Book for 6-8 Weeks. 36 Names. Large Blocks (R6080)
8 1/2 x 11 Teacher Record Book with Teacher's daily schedule; Special duties; Supplementary data sheets
$14.99
Bestseller No. 4
Elan Publishing Company Class Record Book Unstructured. Set it up to Record Grades Your Way! 40 Student Names (Tree Seasons)
Elan Publishing Company Class Record Book Unstructured. Set it up to Record Grades Your Way! 40 Student Names (Tree Seasons)
8.5" x 11" Teacher Record Book; Designed with extra-large blocks for grades, etc; 3 Sections with 105 pages total
$19.95
Bestseller No. 5
IF Bookaroo Bigger Things Notebook Journal - Aubergine
IF Bookaroo Bigger Things Notebook Journal - Aubergine
Bigger and bendier & friendlier notebook (25cm H x 19cm W)- flexible in every way; Lots of useful notebook features inside and out
$17.59

A practical troubleshooting sequence

  1. Count records: use the dashboard and job history to determine whether one logical event produced multiple persisted jobs or one job is being retried.
  2. Trace the producer: check message redelivery, multiple listeners, startup registration, and whether a stable event identifier is used when enqueueing.
  3. Trace the effect: compare job attempts with the external system’s records; add a business idempotency key where supported.
  4. For recurring work, verify the stable recurring ID, schedule timezone, missed-run policy, overlap behavior, and poll interval.
  5. For PROCESSING jobs, inspect the last update, server heartbeat, logs, storage connectivity, and shutdown events.
  6. Only then tune capacity: adjust worker count or polling after identifying whether the limiting factor is pickup delay, database capacity, job duration, or a downstream rate limit.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.