BackgroundJob . enqueue (() -> System . out . println ( "This is all you need for distributed jobs!" ));
Невероятно простой способ выполнения задач по принципу «запустил и забыл» , отложенных , запланированных и повторяющихся задач внутри приложений Java, используя только лямбда-выражения Java 8 . Поддерживаются интенсивные, длительные и кратковременные задания с интенсивным использованием ЦП и операций ввода-вывода. Постоянное хранилище осуществляется либо с помощью РСУБД (например, Postgres, MariaDB/MySQL, Oracle, SQL Server, DB2 и SQLite), либо с помощью NoSQL (ElasticSearch, MongoDB и Redis).
JobRunr предоставляет унифицированную модель программирования для надежного выполнения фоновых задач и запускает их на общем хостинге, выделенном хостинге или в облаке (привет Kubernetes) внутри экземпляра JVM.
Спасибо за создание JobRunr, он мне очень нравится! До этого я использовал подобные библиотеки в Ruby и Golang, и JobRunr пока самая приятная в использовании. Мне особенно нравится приборная панель, она потрясающая! Алексей Денисов
Дополнительные отзывы можно посмотреть на сайте jobrunr.io.
Некоторые сценарии, в которых это может подойти:
Вы можете запускать небольшие и обрабатывать задания в своем веб-приложении или масштабировать его по горизонтали и добавлять столько серверов фоновых заданий, сколько хотите для обработки пикового количества заданий. JobRunr распределит за вас нагрузку по всем серверам. JobRunr также отказоустойчив — не работает ли внешний веб-сервис? Не беспокойтесь: задание автоматически повторяется 10 раз с помощью разумной политики отсрочки выполнения.
JobRunr — это Java-альтернатива HangFire, Resque, Sidekiq, Delayed_job, Celery, похожая на Quartz и Spring Task Scheduler.
Задачи «выстрелил и забыл»
Выделенные потоки рабочего пула выполняют поставленные в очередь фоновые задания как можно скорее, сокращая время обработки вашего запроса.
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 ());
Обработка фоновых задач внутри веб-приложения…
Вы можете обрабатывать фоновые задачи в любом веб-приложении, и у нас есть полная поддержка Spring — JobRunr надежно обрабатывает ваши фоновые задания в веб-приложении.
… или где-нибудь еще
Подобно консольному приложению Spring, завернутому в Docker-контейнер, который продолжает работать вечно и опрашивает новые фоновые задания.
Дополнительную информацию см. на 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
.