An extremely easy way to perform background processing in Java. Backed by persistent storage. Open and free for commercial use.
OTHER License
Bot releases are visible (Hide)
Published by rdehuyss over 1 year ago
StorageProvider
APIPublished by rdehuyss over 1 year ago
None
Published by rdehuyss over 1 year ago
None
useServerPrepStmts = true
Published by rdehuyss over 1 year ago
None
Published by rdehuyss over 1 year ago
🎉 We're happy to announce the release of JobRunr and JobRunr Pro 6.1.0 🎉.
This release includes an important bugfix that surfaced during our internal load testing that exists already since JobRunr 1.0. In some cases, JobRunr does not close an InputStream resulting in a FileSystemException
because of too many open files. See GitHub issue 707 for more info.
Another big improvement is that you now have more options in the JobServerFilter
, allowing you to take custom actions when a Job failed and all the retries are exhausted.
MockJobContext.setUpJobContext(jobContext)
which helps to test Jobs using the JobRequest
& JobRequestHandler
JobServerFilter
has improved a lot. You can now have custom logic that will be executed when a job succeeds, fails or fails after all retries are exhausted.Published by rdehuyss over 1 year ago
🥳 We're happy to announce the 6.0.0 release of JobRunr! 🥳
This includes a lot of new functionality and improvements:
JobBuilder
and RecurringJobBuilder
which allows you to configure all the aspects of a Job
via this builder instead of the @Job
annotation. This means you can now have one api to create jobs with different settings (including name and amount of retries).JobBuilder
:jobScheduler.create(aJob()
.withName("My Enqueued Job")
.withAmountOfRetries(3)
.withDetails(() -> service.doWork()));
Off course, you can also schedule jobs:
jobScheduler.create(aJob()
.withName("My Scheduled Job")
.scheduleAt(Instant.parse(scheduleAt))
.withDetails(() -> service.doWork()));
And this also works for JobRequest
s:
jobRequestScheduler.create(aJob()
.withName("Scan " + file.getName() + " for viruses")
.scheduleIn(Duration.ofMinutes(10))
.withJobRequest(new ScanFileForVirusJobRequest(file.getAbsolutePath())));
@Job
annotation or the new JobBuilder
:@Job(name="My Job", labels={"fast-running-job", "tenant-%0"})
void myFastJob(String tenandId) {
// your business logic
}
jobScheduler.create(aJob()
.withName("My Enqueued Job")
.withLabels("fast-running-job", "tenant-" + tenantId)
.withDetails(() -> service.doWork()));
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-spring-boot-2-starter</artifactId>
<version>${jobrunr.version}</version>
</dependency>
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-spring-boot-3-starter</artifactId>
<version>${jobrunr.version}</version>
</dependency>
The jobrunr-spring-boot-3-starter
will automatically participate in the ahead-of-time processing if you're using a JobRequest
.
jobrunr.jobId
and jobrunr.jobName
.BackgroundJobServer
. As it uses the same heave database aggregation as above, this is now opt-in (or done on the server that hosts the dashboard as it is needed anyway) only, instead of enabled by default on each BackgroundJobServer
. You can still opt-in manually using properties.ConcurrentJobModificationException
. JobRunr is now smarter and after a successful run of the JobZooKeeper, the counter will now also go down. The main purpose for this counter is still to detect database outages (if JobRunr would not stop when a database outage happens, it would flood your logs immediately) and stop processing.org.jobrunr.queues.from-enum=your.package.QueueName
where you pass the fully qualified class name to your enum containing the different queues.
Some great new features to take in JobRunr Pro take your job scheduling to the next level:
The following features are present in JobRunr Pro Enterprise except for our early adopters and great existing customers 🙏:
RecurringJob
takes longer than the interval it is running, the run will be skipped as otherwise you may end up with creating more jobs than you can process. As of JobRunr 6 however, you can define how many instances of a Recurring Job can run in parallel.jobrunr-spring-boot-starter
artifact, this has now been renamed to either jobrunr-spring-boot-2-starter
and jobrunr-spring-boot-3-starter
. Please choose the correct artifact depending on your Spring Boot version.StorageProvider
API to search for scheduled jobs, you may get different results after this release (shifted with the timezone you are in).BackgroundJobServer
would automatically report statistics about the amount of ENQUEUED
/ SUCCEEDED
/ FAILED
jobs to MicroMeter. As each BackgroundJobServer
would report the same metrics and these metrics uses quite a have database aggregation, this now has changed to an opt-in setting.DisplayName
filter has been removed and has now been replaced by the DefaultJobFilter
.Published by rdehuyss over 1 year ago
🥳 We're happy to announce the third Milestone release of JobRunr v6! 🥳
Published by rdehuyss over 1 year ago
🥳 We're happy to announce the second Milestone release of JobRunr v6! 🥳
Published by rdehuyss almost 2 years ago
🥳 We're happy to announce the first Milestone release of JobRunr v6! 🥳
This includes a lot of new functionality and improvements:
JobBuilder
and RecurringJobBuilder
which allows you to configure all the aspects of a Job
via this builder instead of the @Job
annotation. This means you can now have one api to create jobs with different settings (including name and amount of retries).JobBuilder
:jobScheduler.create(aJob()
.withName("My Enqueued Job")
.withAmountOfRetries(3)
.withDetails(() -> service.doWork()));
Off course, you can also schedule jobs:
jobScheduler.create(aJob()
.withName("My Scheduled Job")
.scheduleAt(Instant.parse(scheduleAt))
.withDetails(() -> service.doWork()));
And this also works for JobRequest
s:
jobRequestScheduler.create(aJob()
.withName("Scan " + file.getName() + " for viruses")
.scheduleIn(Duration.ofMinutes(10))
.withJobRequest(new ScanFileForVirusJobRequest(file.getAbsolutePath())));
@Job
annotation or the new JobBuilder
:@Job(name="My Job", labels={"fast-running-job", "tenant-%0"})
void myFastJob(String tenandId) {
// your business logic
}
jobScheduler.create(aJob()
.withName("My Enqueued Job")
.withLabels("fast-running-job", "tenant-" + tenantId)
.withDetails(() -> service.doWork()));
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-spring-boot-2-starter</artifactId>
<version>${jobrunr.version}</version>
</dependency>
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr-spring-boot-3-starter</artifactId>
<version>${jobrunr.version}</version>
</dependency>
The jobrunr-spring-boot-3-starter
will automatically participate in the ahead-of-time processing if you're using a JobRequest
.
jobrunr.jobId
and jobrunr.jobName
.BackgroundJobServer
. As it uses the same heave database aggregation as above, this is now opt-in (or done on the server that hosts the dashboard as it is needed anyway) only, instead of enabled by default on each BackgroundJobServer
. You can still opt-in manually using properties.ConcurrentJobModificationException
. JobRunr is now smarter and after a successful run of the JobZooKeeper, the counter will now also go down. The main purpose for this counter is still to detect database outages (if JobRunr would not stop when a database outage happens, it would flood your logs immediately) and stop processing.
Some great new features to take your job scheduling to the next level:
org.jobrunr.queues.from-enum=your.package.QueueName
where you pass the fully qualified class name to your enum containing the different queues.RecurringJob
takes longer than the interval it is running, the run will be skipped as otherwise you may end up with creating more jobs than you can process. As of JobRunr 6 however, you can define how many instances of a Recurring Job can run in parallel.
The following features are present in JobRunr Pro Platinum except for our early adopters and great existing customers 🙏:
jobrunr-spring-boot-starter
artifact, this has now been renamed to either jobrunr-spring-boot-2-starter
and jobrunr-spring-boot-3-starter
. Please choose the correct artifact depending on your Spring Boot version.StorageProvider
API to search for scheduled jobs, you may get different results after this release (shifted with the timezone you are in).BackgroundJobServer
would automatically report statistics about the amount of ENQUEUED
/ SUCCEEDED
/ FAILED
jobs to MicroMeter. As each BackgroundJobServer
would report the same metrics and these metrics uses quite a have database aggregation, this now has changed to an opt-in setting.DisplayName
filter has been removed and has now been replaced by the DefaultJobFilter
.Published by rdehuyss almost 2 years ago
None
Published by rdehuyss almost 2 years ago
None
Published by rdehuyss almost 2 years ago
None
jobrunr/jobrunr/issues/581 JobRunr does not fail on null values for MDC
jobrunr/jobrunr/issues/586 DBMigration is done multiple times if it takes too much time on first run
jobrunr/jobrunr/issues/593 Inheritance in Background Jobs is not always working
Published by rdehuyss about 2 years ago
None
Published by rdehuyss about 2 years ago
Published by rdehuyss about 2 years ago
Published by rdehuyss about 2 years ago
Published by rdehuyss about 2 years ago
Published by rdehuyss over 2 years ago
No new features
Published by rdehuyss over 2 years ago
Published by rdehuyss over 2 years ago
Various dependencies have been updated