使用 JobRunr 和 Spring Boot 自动执行长时间运行的例行任务
今天我将解释一种部署、管理和监控长时间运行的后台任务的简单方法,尤其是ETL系统。对于已部署的 ETL 工具,每位大数据工程师都会提出的常见问题包括工具的性能、导致处理管道中断的原因、链接多个作业的难易程度等等。
JobRunr可以轻松安排后台长时间运行的任务。它是一个分布式 Java 后台作业调度程序,具有许多令人兴奋的功能,如计划和延迟作业、即发即弃作业、重复作业、排队作业和批处理以及作业链。请注意,其中一些功能仅在专业版中可用。但是,JobRunr 的大部分功能都是完全开源的。该库还提供了一个很好的界面来管理和监控您的所有作业。我发现这真的很吸引人,因为最终用户可以将这种视觉效果用于其他有用的目的;例如,从 UI 中,可以手动触发重复作业,它提供有关下一个作业预计何时运行的报告,
接下来,让我们深入研究将 JobRunr 集成到我们的 Java 应用程序中:
使用的技术:
弹簧靴
JobRunr
杰克逊
Java 11
从创建示例 Spring Boot 应用程序开始;我建议使用Spring Initializr进行快速设置。
将 JobRunr 添加到 Spring Boot 应用程序
将此添加到 pom 文件中的依赖项列表:
<dependency> <groupId>域名unr</groupId> <artifactId>jobrunr-spring-boot-starter</artifactId> <version>${域名ion}</version> </dependency> <dependency> <groupId>域名域名</groupId> <artifactId>jackson-databind</artifactId> <version>域名.0</version> </dependency>
配置 JobRunr 以使用内存存储。通过向您的项目添加一个 bean 类来完成此操作。
@Configuration public class StorageProviderConfig { @Bean public StorageProvider storageProvider(JobMapper jobMapper) { InMemoryStorageProvider storageProvider = new InMemoryStorageProvider(); 域名obMapper(jobMapper); return storageProvider; } }
JobRunr 有一个直观的仪表板,可以轻松监控作业的状态。将以下代码行添加到您的代码中域名erties以激活 UI 仪表板。
域名ground-job-域名led=true 域名域名led=true
接下来,创建一个简单的服务,其中包含模拟长时间运行的任务的逻辑。
@Service public class SampleJobService { public static final long EXECUTION_TIME = 5000L; private Logger logger = 域名ogger(getClass()); private AtomicInteger count = new AtomicInteger(); @Job(name = "The sample job with variable %0", retries = 2) public void executeSampleJob(String variable) { 域名("The sample job has begun. The variable you passed is {}", variable); try { 域名p(EXECUTION_TIME); } catch (InterruptedException e) { 域名r("Error while executing sample job", e); } finally { 域名ementAndGet(); 域名("Sample job has finished..."); } } }
上面的作业在被调用时应该接受一个参数,等待五秒钟,然后打印“Sample job has finished”。它已配置为重试两次(以防失败)。
最后,我们需要安排我们之前创建的作业。将以下代码行添加到您的 Spring Boot 入口类中。
@Autowired private JobScheduler jobScheduler; @PostConstruct public void scheduleRecurrently() { jobScheduler.<SampleJobService>scheduleRecurrently(域名y5minutes(), x -> 域名uteSampleJob("a recurring job")); }
瞧,我们已成功安排作业每五分钟执行一次。运行应用程序,您应该能够访问端口 8,000 上的 JobRunr 仪表板(JobRunr 的默认端口,您可以根据需要更改此端口)。
本文的目的是让您快速开始使用 JobRunr。您可以在此基础上开发更复杂的工作流程;例如,可以使用 JobRunr 顺序链接多个作业。更多信息,请访问JobRunr官网