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
。