Recommended Free Tools
JobRunr moves work out of a request or caller thread by storing a job definition and letting a background worker execute it. A typical setup has four parts: application code creates jobs, a scheduler handles delayed or recurring work, a StorageProvider persists job data, and a BackgroundJobServer processes jobs. The dashboard is a separate, optional interface for inspecting operations.
For production, use durable database-backed storage, explicitly enable the worker and any dashboard you need, and protect the dashboard as a privileged interface. JobRunr retries failures, but retries do not guarantee that an external side effect happens exactly once: design job work to tolerate repetition.
As an Amazon Associate I earn from qualifying purchases.
How JobRunr fits into a Java application
JobRunr is a library embedded in a JVM application, rather than a separate broker that replaces your application. Your code submits work through BackgroundJob or a JobScheduler; storage holds the job data; and one or more background servers execute it. The dashboard can show job and server activity, but it is not the worker itself.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minute- Job creation: enqueue work, schedule a one-time delayed job, or register a recurring definition.
- Storage: persist job details so workers can find and process them, including after application restarts when the provider is durable.
- Background server: run workers that claim and execute jobs. In the documented deployment setup, the background server is disabled by default; configuring storage alone does not start processing.
- Dashboard: an opt-in operational interface, disabled by default in the documented setup.
A small installation can run the application, scheduler, and workers together, with the dashboard enabled only if appropriate. Production deployments can separate web/scheduler and worker roles. Do not start more than one BackgroundJobServer in the same JVM.
Configure storage and start the worker
Choose storage before relying on background work. The Java quick-start uses InMemoryStorageProvider to make a setup easy to try, but its jobs do not survive a process restart. For production recovery, choose a supported persistent SQL or NoSQL provider, configure its serializer and credentials, and provision database connectivity and capacity for the expected workload. Job details are stored as JSON through a supported serializer.
The following is an illustrative plain-Java shape, not a complete provider-specific configuration. Adapt provider setup and lifecycle management to your JobRunr version and framework:
// Illustrative: configure a durable StorageProvider for production first.
JobScheduler scheduler = new JobScheduler(storageProvider);
BackgroundJobServer server = new BackgroundJobServer(storageProvider);
server.start();
In framework integrations, follow the integration’s configuration and lifecycle conventions rather than creating unmanaged instances. The JobRunr Java guide uses modern Java 25 syntax in examples, while the library itself is compatible with Java 8 and higher; the example syntax and the library’s minimum compatibility are different claims.
Rank #2
Create immediate, delayed, and recurring jobs
Use the scheduling pattern that matches when the work should run. Immediate enqueueing makes work eligible for a worker; it does not mean the caller waits for the job to finish.
| Pattern | API shape | What it does |
|---|---|---|
| Immediate | BackgroundJob.enqueue(() -> service.process(orderId)) |
Stores a job for background execution as soon as a worker can process it. |
| One-time delayed | BackgroundJob.schedule(Instant, () -> service.process(orderId)) |
Schedules one execution for a specified future instant. |
| Recurring | Recurring scheduling API with a cron expression or interval | Registers a recurring definition; jobs are created as its schedule comes due. |
For delayed jobs, the documented default scheduled-job polling interval is 15 seconds. Treat that as a configuration default, not a promise that execution begins at an exact second: actual start also depends on polling, worker availability, storage, and workload.
Job lambdas and their arguments are serialized. Keep job arguments suitable for serialization and avoid storing unnecessarily large or stale object graphs. A common design choice is to pass a stable identifier, then load the current business data inside the job; that is an application design practice, not a guarantee supplied by JobRunr.
For code that needs to be tested or composed, the documentation recommends injecting and using JobScheduler rather than relying on the static BackgroundJob convenience methods.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Handle retries and make job effects safe
JobRunr’s official Introduction says that, by default, a failed job is retried up to 10 times with exponential backoff. The number is a default documented by JobRunr, not a fixed limit for every configuration. Retry behavior can be customized using annotations or JobBuilder; the documentation also describes custom retry filters and policies. Once retries are exhausted, the job is marked FAILED and remains visible for operational action.
Retries are useful for transient problems, such as a temporarily unavailable dependency. They can also repeat work that already partly succeeded. JobRunr’s FAQ question about processing a job only once refers to optimistic locking for claiming a job among competing workers; it should not be read as exactly-once delivery of side effects to an external database, payment provider, email service, or API.
Rank #4
- Make operations idempotent where practical, so repeating the same job does not create duplicate business effects.
- Use an idempotency key, uniqueness constraint, or equivalent safeguard when the downstream system supports it.
- Separate transient errors from permanent input or logic errors when tuning retry behavior.
- After a failure, fix the underlying cause before requeueing; otherwise the retry may simply fail again.
Monitor jobs with the dashboard
The dashboard is disabled by default in the documented deployment setup. Enable it explicitly when needed. The documented default local address is http://localhost:8000; verify the configured address and port in your deployment rather than assuming that local default applies outside it.
JobRunr’s dashboard documentation describes job-state views, job histories, exception details and stack traces, recurring jobs, and worker-server visibility. A practical failure workflow is:
- Check the counts and lists for enqueued, processing, and failed jobs to spot a growing backlog or a failure cluster.
- Open a failed job’s history and inspect its exception and stack trace to identify the failing code path or dependency.
- Determine whether the cause has been corrected and whether repeating the job is safe for its business effects.
- Requeue the job only when recovery is appropriate; delete it only when you have confirmed it should not run.
The dashboard can expose job data and permits destructive actions such as deleting jobs. JobRunr’s deployment guide warns, “Do not deploy an insecure dashboard.” Run it on one instance rather than on every worker, keep it behind internal networking or an authenticated gateway, and do not expose it publicly. The documentation notes that OSS basic authentication is available but relatively weak; do not treat it as a substitute for a properly protected access boundary.
Best Value
Add metrics for ongoing operational monitoring
The deployment guide identifies Micrometer metrics as an option for monitoring. Background-job-server metrics include per-node CPU and memory, worker-pool size, and heartbeats; job metrics report counts by state. Job metrics are off by default, while server metrics are on by default in the documented Spring and Micronaut integrations.
Use the dashboard for investigating individual jobs and metrics for observing trends over time. You can build alerts around sustained failures, backlog growth, or unhealthy/missing server heartbeats, but those are alerting policies you define in your monitoring system, not built-in JobRunr alert thresholds.
Choose a deployment topology and scale carefully
Start with the simplest topology that meets availability and security needs, then separate roles when workload or operational boundaries justify it.
| Topology | Useful when | Trade-off |
|---|---|---|
| Application, scheduler, and workers together | A modest deployment benefits from fewer moving parts. | Web traffic and job processing share a deployment and its resource limits. |
| Separate worker deployment | Jobs need independent scaling or resource isolation from request handling. | Requires operating another role and ensuring it uses the same durable storage. |
| Dashboard on one protected instance | Operators need job diagnostics without placing the interface on every worker. | Requires an explicit secure access path and careful handling of its privileged controls. |
Multiple application instances can join the processing cluster. JobRunr documents a master server that performs recurring scheduling and housekeeping. The underlying database is a practical scaling constraint, and the deployment guide says performance is limited by the database. Adding workers alone does not establish higher throughput: evaluate storage load, job duration, worker count, backlog behavior, and the capacity and rate limits of downstream services.
For a single combined deployment, explicitly check that the background server is enabled; the documented scheduler defaults to enabled, but the server and dashboard default to disabled. For split deployments, ensure that the scheduling role and worker role are configured consistently against the intended storage and that only one dashboard instance is exposed. Never run multiple background-server instances inside one JVM.
When to consider advanced capabilities
The open-source dashboard and job execution features cover the core workflow described here. JobRunr Pro may be relevant if requirements include capabilities such as single sign-on, role-based access control, batches, or job chaining. Confirm current edition details against the official product documentation before choosing an edition; feature availability can change.
Quick Recap
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.

