Time for JobRunr v7.0.0!
We’re proud to announce the first release candidate of JobRunr & JobRunr Pro v7.0.0

Celebration time - JobRunr Release Candidate v7.0.0-RC.0 is now available 🖥️
Are we ready to press ‘UPDATE’ button and go to celebrate?🥳
Our developers have been working hard these past months to provide you with new improved version. We would like thank all the companies that tested the beta version before this release to give you these features.
As we are about to launch the new v7.0.0 in the upcoming weeks, we want to have your input and your feedback before releasing the final version. Be the first one to try out and see if it runs smoothly for your use case. As always, your input is very important for releasing the final version.
The release candidate is now available via Maven Central and GitHub/JobRunr. Update now and explore new features in JobRunr Pro and JobRunr OSS!
👉 please be aware that we’re still in the process of updating our documentation. Thank you for your understanding.
What is new?
Pro Version:
New Features
- Improved OpenId authentication with authorization: Add full authorization support in the dashboard based on rules #188
 - Dashboard GDPR support: Allow to redact jobs so that no confidential information (e.g. job parameters) can be leaked. #194
 - Rate Limiting: Rate Limit the amount of jobs using a 
ConcurrentJobRateLimiterand theSlidingTimeWindowRateLimiter#202 - Support for Virtual Threads: Add support for Virtual Threads if on Java 21 or higher #906
 - Dashboard: Add extra columns to job tables and allow to configure columns visibility #250
 - Cursor based Job Page: Add initial support for Cursor Based Paging to support multi dashboard #212
 InMemoryStorageProvidernow allows for a pollInterval as small as 200ms (useful for testing purposes) (issue #619) #909- Dynamic can reserve a certain amount of the total workers using 
FixedSizeWorkerPoolDynamicQueuePolicy#237 - Allow updating labels (issue #239) #251
 - Allow to delete recurring jobs automatically using a 
deleteAthint #257 - Add support for 
JobProgressFilterto get notified on job progress #282 
Enhancements
- BackgroundJobServer Master Tasks are now spread over multiple threads for smooth processing. #280
 - Java 8 compatibility guaranteed #882
 - Use time-based UUID’s which are better for database performance #890
 - Significantly decrease JSON size. #892
 - Improve Dynamic Queue Policy in combination with rate limiters by slowly phasing out unused dynamic queues #216
 - Refactor the 
StorageProviderand cleanup deprecated methods #893 - Workflow improvement: jobs within batch jobs can now use continuations while batch jobs themselves have continuations #201
 - Workflow improvement: jobs can now continueOn success and continueOn failure or just onFailure in #260
 - Performance improvement: prevent Optimistic Locking Exceptions and use 
select for update skip lockedif the database supports it #904: - Performance improvement: improved SQL indexes (thanks to the customers who where willing to share their data)
 - Support for unlimited batch jobs (issue #254) #265
 - Dashboard: batch jobs are now directly visible on the jobs page #250
 - [Micrometer] Improve Job Metrics (issue #242) #274
 - Wait for database migrations to finish before starting background job processing #266
 - Fetch all jobs 
SCHEDULEDat the same Instant #273 - JobRunr let’s you know when your JobFilters are too slow via a warning. #961
 
Fixed bugs
- [Micronaut] Fix Bug Micronaut Integration fails if multiple servers are used #852
 - [MicroMeter] Make sure MicroMeter Job metrics is also working with Fluent configuration #207
 - Fix when moving from JobRunr OSS v4 to JobRunr Pro v6 #880
 - Refactor batch jobs to not use metadata for succeeded child jobs. (issue #217)
 - Fix bug in
MigrateFromV5toV6Taskrelated RecurringJobs migration #238 - Allow to gracefully stop the 
BackgroundJobServer#272 - Fix 
enqueueOrReplaceandscheduleOrReplacenow update server tags (issue #164) #267 
Breaking changes
- Drop support for 
StorageProvidersstill in Beta (e.g.,ElasticSearchStorageProvider,JedisStorageProvider, etc.) @Recurringhas been moved to coreorg.jobrunr.jobs.annotation.RecurringJobScheduler.delete(String id)has been renamed toJobScheduler.deleteRecurringJob(String id)- The interface 
StorageProviderhas been updated PageandPageRequesthave been updated- Overall 
BatchJobs logic has been rewritten, make sureMigrateFromV6toV7Taskis run 
OSS version:
New features
- JobRunr now has builtin support for Virtual Threads! They are enabled by default for JDK 21 and higher. PR #906
 - InMemoryStorageProvider now allows for a pollInterval as small as 200ms (useful for testing purposes). Issue #619, PR #909
 
Enhancements
- Use Time-based UUID’s as ID’s for jobs instead of UUID.randomUUID() for lower disk usage in databases, issue #891, PR #890
 - Significantly decrease JSON size, PR #892
 - Reduce load on database by reducing the amount of 
ConcurrentModificationExceptions. #904 - BackgroundJobServer Master Tasks are now spread over multiple threads for smooth processing. #954
 - JobRunr let’s you know when your JobFilters are too slow via a warning. #961
 - [Quarkus] Separate build time and runtime configuration. PR #845
 - [Quarkus] Update Quarkus related settings to ConfigMapping. PR #876
 - [Elasticsearch] Update to new Java API. Issue #499, PR #850
 - Wait for database migrations to finish before starting background job processing
 
Fixed bugs
- Make database migrations work on WildFly, PR #883
 - Fix Bug 
ApplyStateFilteris called before save resulting in multiple calls toonStateApplied., issue #902, PR #903 - [Quarkus] As a workaround to issue #887, JobRunr will now first look Jackson capabilities and use it when available. PR #913.
 - Fix Bug 
JobServerFilter.onProcessingFailedis not called when a job orphans (e.g. if background job server dies). Issue #920, PR #921 - Fix Bug 
IllegalStateException: Can not find variable 3 in stack. Issue #942, PRs #941, #945 - [Micronaut] Fix Bug Integration with Micronaut fails when multiple servers are started. Issue #847, PR #852
 - Fix Bug 
CronExpression.validateSchedule()does not correctly check for interval size. Issue #858, PR #859 
Misc
- Updated dependencies, PRs #851, #886, #889, #917, #943, #956
 - Refactoring, PRs #893, #894, #895, #934, #937, #938
 - Improved logging / exceptions: PRs #860, #925
 
Breaking changes
@Recurringhas been moved to coreorg.jobrunr.jobs.annotation.RecurringJobScheduler.delete(String id)has been renamed toJobScheduler.deleteRecurringJob(String id)- The 
StorageProviderhas been updated PageandPageRequesthave been updated
Contributors
We thank the following contributors for their help with JobRunr v7!
Try it out now and let us know your feedback! Your input is very important, so we can provide you smooth v7.0.0 JobRunr!
Best,
Friends of developers
The JobRunr Team