BackgroundJob . enqueue (() -> System . out . println ( "This is all you need for distributed jobs!" ));
仅使用Java 8 lambda即可在Java 应用程序中执行即发即忘、延迟、计划和重复作业的极其简单的方法。支持 CPU 和 I/O 密集型、长时间运行和短期运行的作业。持久存储通过 RDBMS(例如 Postgres、MariaDB/MySQL、Oracle、SQL Server、DB2 和 SQLite)或 NoSQL(ElasticSearch、MongoDB 和 Redis)完成。
JobRunr 提供了一个统一的编程模型,以可靠的方式处理后台任务,并在共享托管、专用托管或云中(hello Kubernetes)的 JVM 实例中运行它们。
感谢您构建 JobRunr,我非常喜欢它!在此之前,我在 Ruby 和 Golang 中使用过类似的库,而 JobRunr 是迄今为止使用起来最愉快的一个。我特别喜欢仪表板,太棒了!亚历克斯·杰尼索夫
查看 jobrunr.io 上的更多反馈。
它可能适合一些场景:
您可以在 Web 应用程序中启动小型作业并处理作业,也可以水平扩展并根据需要添加任意数量的后台作业服务器来处理作业高峰。 JobRunr 将为您将负载分配到所有服务器上。 JobRunr 还具有容错功能 - 外部 Web 服务是否已关闭?不用担心,该作业会通过智能回退策略自动重试 10 次。
JobRunr 是 HangFire、Resque、Sidekiq、delayed_job、Celery 的 Java 替代品,类似于 Quartz 和 Spring 任务调度程序。
即发即忘任务
专用工作池线程会尽快执行排队的后台作业,从而缩短请求的处理时间。
BackgroundJob . enqueue (() -> System . out . println ( "Simple!" ));
延迟的任务
计划的后台作业仅在给定时间后执行。
BackgroundJob . schedule ( Instant . now (). plusHours ( 5 ), () -> System . out . println ( "Reliable!" ));
重复任务
重复性工作从未如此简单;只需调用以下方法即可使用 CRON 表达式执行任何类型的重复任务。
BackgroundJob . scheduleRecurrently ( "my-recurring-job" , Cron . daily (), () -> service . doWork ());
在 Web 应用程序中处理后台任务...
您可以在任何 Web 应用程序中处理后台任务,并且我们对 Spring 提供全面支持 - JobRunr 可以可靠地在 Web 应用程序中处理您的后台作业。
......或其他任何地方
就像封装在 Docker 容器中的 Spring 控制台应用程序一样,它会永远运行并轮询新的后台作业。
请参阅 https://www.jobrunr.io 了解更多信息。
JobRunr 在 Maven Central 中可用 - 您所需要做的就是添加以下依赖项:
< dependency >
< groupId >org.jobrunr</ groupId >
< artifactId >jobrunr</ artifactId >
< version >${jobrunr.version}</ version >
</ dependency >
只需将依赖添加到 JobRunr 即可:
implementation ' org.jobrunr:jobrunr:${jobrunr.version} '
将jobrunr-spring-boot-3-starter添加到您的依赖项中,您就几乎准备好了!只需设置您的application.properties
:
# the job-scheduler is enabled by default
# the background-job-server and dashboard are disabled by default
org.jobrunr.job-scheduler.enabled=true
org.jobrunr.background-job-server.enabled=true
org.jobrunr.dashboard.enabled=true
定义一个javax.sql.DataSource
并在启动时添加以下代码:
@ SpringBootApplication
public class JobRunrApplication {
public static void main ( String [] args ) {
SpringApplication . run ( JobRunrApplication . class , args );
}
@ Bean
public JobScheduler initJobRunr ( DataSource dataSource , JobActivator jobActivator ) {
return JobRunr . configure ()
. useJobActivator ( jobActivator )
. useStorageProvider ( SqlStorageProviderFactory
. using ( dataSource ))
. useBackgroundJobServer ()
. useDashboard ()
. initialize (). getJobScheduler ();
}
}
有关提交补丁和贡献工作流程的详细信息,请参阅贡献。
Good first issue
的标签的问题git clone https://github.com/jobrunr/jobrunr.git
cd jobrunr
cd core/src/main/resources/org/jobrunr/dashboard/frontend
npm i
npm run build
cd -
./gradlew publishToMavenLocal
然后,在您自己的项目中,您可以依赖org.jobrunr:jobrunr:1.0.0-SNAPSHOT
。