Jobrunr Jobrunr Versions Save

An extremely easy way to perform background processing in Java. Backed by persistent storage. Open and free for commercial use.

v7.0.0

1 month ago

πŸŽ‰ Time for JobRunr v7.0.0 πŸŽ‰

It's Celebration Time Once Again at JobRunr!

We are excited to announce the release of JobRunr v7.0.0 and JobRunr Pro v7.0.0. This major release is now available via Maven Central and directly for our Pro subscribers through the customer portal. Building on our promise to deliver robust job scheduling solutions, v7.0.0 brings a suite of powerful new features, substantial performance enhancements, and critical dashboard improvements. Let’s delve into what makes this release a game-changer for developers and enterprises alike for both JobRunr Pro and JobRunr OSS!

πŸ™ We'd also like to thank all of the developers and companies who have beta tested JobRunr v7 beta's and release candidates.

What is new?

Pro Version:

New Features

  • JobRunr Pro now has builtin support for Virtual Threads! They are enabled by default for JDK 21 and higher. PR #906
  • Improved OpenId authentication with authorization - add authorization support in the dashboard based on extensive rule-set. PR #188
  • Dashboard GDPR/HIPAA support: allow to redact jobs so that no confidential information can be leaked. PR #194
  • Rate Limiting - rate limit the amount of jobs being processed using either a ConcurrentJobRateLimiter and the SlidingTimeWindowRateLimiter. PR #202
  • Add support for Strings as a JobIdentifier. PR #285 (fixes #236)
  • Workflow improvement: jobs can now continueOn success and continueOn failure or just onFailure. PR #260
  • Make BackgroundJobServer shutdown period configurable. PR #297 (fixes #288)
  • Add option to skip retries with DoNotRetryPolicy for individual jobs and exceptions. PR #303
  • Dashboard - add extra columns to job tables and allow to configure columns visibility. PR #250
  • Cursor based Job Page - add support for Cursor Based Paging to support multi dashboard. PR #212
  • InMemoryStorageProvider now allows for a pollInterval as small as 200ms (useful for testing purposes). PR #909 (fixes #619)
  • Dynamic Queues can reserve a certain amount of the total workers using the FixedSizeWorkerPoolDynamicQueuePolicy. PR #237
  • Allow updating job labels from within a JobFilter. PR #251 (fixes #239)
  • Allow to delete recurring jobs automatically using a deleteAt hint. PR #257
  • Add support for job progress monitoring via JobServerFilter to get notified on job progress. PR #282

Enhancements

  • BackgroundJobServer Master Tasks are now spread over multiple threads for smooth processing. PR #280
  • Use Time-based UUID's as ID's for jobs instead of UUID.randomUUID() for lower disk usage in databases. PR #890 (fixes #891)
  • Significantly decrease JSON size. PR #892
  • Improve Dynamic Queue Policy in combination with rate limiters by slowly phasing out unused dynamic queues. PR #216
  • Workflow improvement: jobs within batch jobs can now use continuations while batch jobs themselves have continuations. (fixes #201)
  • Performance improvement: prevent Optimistic Locking Exceptions and use select for update skip locked if the database supports it. PR #904
  • Refactor batch jobs to not use metadata for succeeded child jobs. (fixes #217)
  • Support for unlimited batch jobs. PR #265 (fixes #254)
  • Dashboard: batch jobs are now directly visible on the jobs page. PR #250
  • Improve Job Metrics using MicroMeter. PR #274 (fixes #242)
  • Wait for database migrations to finish before starting background job processing PR #266
  • Improve Recurring Jobs in Spring Boot / Micronaut / Quarkus and keep paused state. PR #304
  • Fetch all SCHEDULED jobs at the same pollInterval. PR #273
  • JobRunr let's you know when your JobFilters are too slow via a warning. PR #961
  • Query new JobRunr version via frontend instead of via the backend. PR #979
  • Refactor the StorageProvider and cleanup deprecated methods. PR #893
  • Performance improvement: improved SQL indexes (thanks to the customers who where willing to share their data)
  • Log warning if ASM is not compatible. PR #925 (fixes #924)

Fixed bugs

  • Fix Bug where Micronaut integration fails if multiple servers are used. PR #852
  • Make sure MicroMeter Job metrics is also working with Fluent configuration .PR #207
  • Fix when moving from JobRunr OSS v4 to JobRunr Pro v6. PR #880
  • Fix bug inMigrateFromV5toV6Task related RecurringJobs migration. PR #238
  • Allow to gracefully stop the BackgroundJobServer. PR #272
  • enqueueOrReplace and scheduleOrReplace now also update server tags PR #267 (fixes #164)
  • Fix GraalVM native mode in Quarkus PR #295
  • Make database migrations work on WildFly. PR #883
  • Fix Bug ApplyStateFilter is called before save resulting in multiple calls to onStateApplied. PR #903 (fixes #902)
  • Use Jackson by default in Quarkus if present. PR #913 (fixes #887)
  • Fix Bug JobServerFilter.onProcessingFailed is not called when a job orphans (e.g. if background job server dies). PR #921 (fixes #920)
  • Fix Bug IllegalStateException: Can not find variable 3 in stack. PR #941, PR #945 (fixes #942)
  • Fix Bug CronExpression.validateSchedule() does not correctly check for interval size. PR #859 (fixes #858)

Breaking changes

  • @Recurring has been moved to core org.jobrunr.jobs.annotations.Recurring and uses enums instead of booleans. The attributes paused and scheduleJobsSkippedDuringDowntime now use an enum instead of a boolean. This allows us to keep the paused state of a Recurring job even if you redeploy (default) whereas in the past, on redeploy, the Job would be started automatically again. If paused is put to false in the @Recurring, the Recurring job will start on redeploy even if it was paused before via the dashboard
  • JobScheduler.delete(String id) has been renamed to JobScheduler.deleteRecurringJob(String id)
  • The StorageProvider has been updated and is not backwards compatible as is the Page and PageRequest. A new class org.jobrunr.storage.Paging was added where all utility methods regarding Paging have been collected
  • For SQL databases, JobRunr deletes all indexes and recreates them for better performance. If you have a lot of jobs in your database, the migration may take a while. Also, on some databases column types are changed for better performance making this release not backwards compatible.
  • JobRunr and JobRunr Pro 7 requires MongoDB Driver 5.0.0 or higher (please be aware that Spring Boot 3.2 still depends on Mongo 4.x)
  • We're also dropping the RedisStorageProvider and the ElasticSearchStorageProvider in JobRunr Pro. JobRunr 7 OSS will be the last to support it.
  • JobContext.getSignature() has been renamed to JobContext.getJobSignature()
  • JobDashboardProgressBar.setValue(...) has been renamed to JobDashboardProgressBar.setProgress(long succeededAmount)
  • Overall BatchJobs logic has been rewritten, make sure MigrateFromV6toV7Task is run
  • Dynamic queues configuration has been changed in Spring, Quarkus and Micronaut: dynamic-queues.type has been removed, instead the type is now part of the dynamic queues property keys, e.g., org.jobrunr.jobs.dynamic-queue.round-robin.label-prefix (please adapt to your framework)

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). PR #909 (fixes #619)
  • Make BackgroundJob server shutdown period configurable. PR #973 (fixes #288)

Enhancements

  • Use Time-based UUID's as ID's for jobs instead of UUID.randomUUID() for lower disk usage in databases. PR #890 (fixes #891)
  • Significantly decrease JSON size, PR #892
  • Performance improvement: prevent Optimistic Locking Exceptions and use select for update skip locked if the database supports it PR #904:
  • BackgroundJobServer Master Tasks are now spread over multiple threads for smooth processing. PR #954
  • Add access to labels via JobContext. PR #969 (fixes #286)
  • JobRunr let’s you know when your JobFilters are too slow via a warning. PR #961
  • Quarkus - Separate build time and runtime configuration. PR #845
  • Update ElasticSearch to new Java API. PR #850 (fixes #499)
  • Wait for database migrations to finish before starting background job processing
  • Query new JobRunr version via frontend instead of via the backend PR #979
  • Log warning if ASM is not compatible. PR #925 (fixes #924)

Fixed bugs

  • Make database migrations work on WildFly. PR #883
  • Fix Bug ApplyStateFilter is called before save resulting in multiple calls to onStateApplied. PR #903 (fixes #902)
  • Use Jackson by default in Quarkus if present. PR #913 (fixes #887)
  • Fix Bug JobServerFilter.onProcessingFailed is not called when a job orphans (e.g. if background job server dies). PR #921 (fixes #920)
  • Fix Bug IllegalStateException: Can not find variable 3 in stack. PR #941, PR #945 (fixes #942)
  • Fix Bug where Micronaut integration fails if multiple servers are used. PR #852 (fixes #847)
  • Fix Bug CronExpression.validateSchedule() does not correctly check for interval size. PR #859 (fixes #858)

Misc

Breaking changes

  • @Recurring has been moved to core org.jobrunr.jobs.annotations.Recurring
  • JobScheduler.delete(String id) has been renamed to JobScheduler.deleteRecurringJob(String id)
  • The StorageProvider has been updated and is not backwards compatible as is the Page and PageRequest. A new class org.jobrunr.storage.Paging was added where all utility methods regarding Paging have been collected
  • For SQL databases, JobRunr deletes all indexes and recreates them for better performance. If you have a lot of jobs in your database, the migration may take a while.
  • JobRunr and JobRunr Pro 7 requires MongoDB Driver 5.0.0 or higher (please be aware that Spring Boot 3.2 still depends on Mongo 4.x)
  • We're also deprecating the RedisStorageProvider and the ElasticSearchStorageProvider. JobRunr 7 will be the last to support it.
  • JobContext.getSignature() has been renamed to JobContext.getJobSignature()
  • JobDashboardProgressBar.setValue(...) has been renamed to JobDashboardProgressBar.setProgress(long succeededAmount)

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

v7.0.0-RC.1

1 month ago

πŸŽ‰ Time for JobRunr v7 RC.1 πŸŽ‰

πŸ™ We'd like to thank all of you testing JobRunr v7 so far.

πŸ•£ JobRunr v7 will be officially released on the 9th of April. Join the webinar to celebrate this major release with us. It's also the opportunity hear from you! We'll do our best to address any questions, remarks or suggestions you have.

πŸ‘‰ please be aware that we are still in the process of updating our documentation.

New Features

  • Configurable Shutdown period of BackgroundJobServer #969 and #973
  • Add access to labels via JobContext #969

Enhancements

  • Use LettuceConnectionFactory to get RedisClient

Fixed bugs

  • Fix Bug Spring Boot GraalVM native mode build fails if Bean is defined via JavaConfig (issue #962) #963
  • Fix bug save empty list in MongoDB #972

Misc

  • Update dependencies #970

Breaking changes

JobContext.getSignature() has been renamed to JobContext.getJobSignature()

Full Changelog: https://github.com/jobrunr/jobrunr/compare/v7.0.0-RC.0...v7.0.0-RC.1

v7.0.0-RC.0

1 month ago

πŸŽ‰ Time for JobRunr v7 RC.0 πŸŽ‰

πŸ‘‰ please be aware that we are still in the process of updating our documentation.

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 ApplyStateFilter is called before save resulting in multiple calls to onStateApplied., 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.onProcessingFailed is 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

  • @Recurring has been moved to core org.jobrunr.jobs.annotations.Recurring
  • JobScheduler.delete(String id) has been renamed to JobScheduler.deleteRecurringJob(String id)
  • The StorageProvider has been updated
  • Page and PageRequest have been updated
  • JobDashboardProgressBar.setValue(...) has been renamed to JobDashboardProgressBar.setProgress(long succeededAmount)
  • [MongoDB] Requires Mongo Driver v5 or higher

Contributors

We thank the following contributors for their help with JobRunr v7!

v6.3.5

2 months ago

New Features

none

Bugfixes

  • Issue 942: IllegalStateException: Can not find variable 3 in stack

v6.3.4

4 months ago

New features

None

Improvements

  • JobRunr issue 847: Micronaut - Integration with micronaut fails when multiple servers are started

Bugfixes

v6.3.3

5 months ago

New features

  • JobRunr PR 841: Quarkus - Separate build time and runtime configuration

Bugfixes

  • JobRunr issue 864: Quarkus - Synthetic class name is wrongly used used instead of classname / interfacename

A big shoutout and thank you πŸ™ to @tms0 for his help with Quarkus and JobRunr. It's thanks to him that you can run configure JobRunr in Quarkus at runtime.

v6.3.2

7 months ago

New features

Bugfixes

  • JobRunr PR 843: Quarkus: Fix metrics producer being added unconditionally
  • JobRunr issue 645: [BUG] Kotlin - Can not find variable 3 in stack
  • JobRunr issue 748: [BUG] JobRunr crashes when some other job is deleted while auto-commit was set to false

Improvements

  • Dependency updates

A big shoutout and thank you πŸ™ to @tms0 for his help with Quarkus and JobRunr. It's thanks to him that you can run JobRunr in Quarkus using GraalVM Native Mode .

v6.3.1

8 months ago

New features

None

Bugfixes

  • JobRunr issue 822: [BUG] Quarkus NullPointerException if JobScheduler is disabled
  • JobRunr issue 824: [BUG] Add additional Spring AOT Hints for JobRunr 6.3.0 + Spring Boot 3.1.3

Improvements

v6.3.0

9 months ago

Celebration time!

I'm pleased to announce the release of JobRunr v6.3.0 (which is now available via Maven Central) and JobRunr Pro v6.3.0 which is available for customers with a subscription.

Since the 6.2.0 release, we did some performance improvements related to the dashboard resulting in less calls to the JobRunr rest API and we also did stability improvements which should result in less SevereJobRunrExceptions. This release adds support for Micronaut 4 and Kotlin 1.9.

In JobRunr Pro, we added Observability support, added the option to set a Job time-out, users can now sort the jobs in the dashboard and we improved the RetryPolicy which now also allows to specify a custom amount of retries per Exception. And last but not least, all dependencies were also updated.

I also want to shoutout to Sergi Almar who improved the spring-boot-starter and Geir Sagberg who fixed a bug in the dashboard for their contributions. You have my eternal πŸ™.

Observability

Although the JobRunr Pro Dashboard gives instant insights how your jobs are doing, you may already have an observability platform like Jaeger, HoneyComb or New Relic running inside your organization. JobRunr Pro now out-of-the box integrates with many of these observability platforms so you can keep on top of things. This means you can now see how long your different Job instances take and where a job spends the most time right from your existing observability platform.

Job Timeout

A Job time-out is exactly what you think it is - specify it when creating a Job and if the Job is processing longer than the given time-out, JobRunr will automatically interrupt it.

Improvements

Bugfixes

v6.2.3

10 months ago

New features

None

Bugfixes

  • #796 Fix requeue and delete from dashboard