Last Updated:

JobRunr 4.0 改进了与 Spring Starter、Quarkus 和 Micronaut 的集成

银狐

JobRunr是一种相对较新的 JVM 作业调度工具,它允许开发人员仅使用可以管理延迟和重复作业的单行 Java lambda 来调度作业。

JobRunr 使用StorageProvider接口存储每个作业的作业详细信息,并支持所有主要的 SQL 数据库和 NoSQL 数据库。通过这种方式,它是容错的,因为默认情况下,如果遇到异常,它将使用指数退避策略重新安排后台作业。由于 JobRunr 不会对其他作业保持任何锁定,因此可以在不同的机器上分发和处理作业。

上周,JobRunr发布了4.0 版本,它带来了更新的 Spring Boot Starter 支持、与 Quarkus 和 Micronaut 的新集成以及新的作业分析性能模式,用于检查作业是否可以缓存以加快后续调用。

JubRunr 还包括一个内置仪表板,允许监控作业。

JobRunr 的创始人和主要开发者Ronald Dehuysser向 InfoQ 谈到了这个最新版本

InfoQ:JobRunr 的开发灵感是什么?

Ronald Dehuysser:在我的职业生涯中,有几次我需要对几 GB 的数据进行一些非常困难的计算,这些计算需要一些时间才能完成。对于这些类型的计算,我从未找到合适的 Java 框架来帮助我以干净的代码方式可靠地完成工作。

另一个用例示例是从不支持推送通知的旧系统导入数据。但是如果您在负载平衡的环境中工作,这将变得更加困难,因为所有节点都会检查新数据,而这应该只发生在一个节点上。

有 Spring Batch 或 Quartz,但这些框架都让你实现自定义接口,它们增加了很多开销,而我只想在后台运行一些长时间运行的任务。

JobRunr 通过只接受任何 Java 8 lambda、分析它并将作业信息存储在 SQL 或 NoSQL 数据库中来解决所有这些问题。您可以使用 Cron 表达式安排这些作业尽快执行、在将来某个时间执行或以重复方式执行。

一旦这些作业保存在数据库中,它们就可以在不同的服务器上并行处理。这减少了处理所有这些作业所需的总时间。由于它内部使用乐观锁,每个作业只会被处理一次。

在任何软件架构中,事情有时会出错,并且会出错。此外,在这种情况下,JobRunr 会使用智能退避策略自动帮助并重试失败的作业。

最后但并非最不重要的一点是,我希望了解这些工作是如何执行的。这就是我添加仪表板的原因。它确实有助于监控作业进度,您可以轻松找到作业失败的根本原因。

InfoQ:JobRunr 的前景如何?

Dehuysser: JobRunr 4.0.0 刚刚发布,它增加了与 Spring、Quarkus 和 Micronaut 的更好集成。它还为作业分析添加了一个新的缓存,使事情变得更快。

由于 JobRunr 是一个开源项目。我对社区中关于如何改进它的想法持开放态度。我的一些想法包括更好的算法(可能基于多元机器学习)来缩短所有这些作业的处理时间。

InfoQ:关于 JobRunr,您还希望我们的读者了解什么?

Dehuysser:我想强调三件事:

  1. JobRunr 使用 ASM(Spring、Hibernate 和许多其他框架也使用它)来分析作业 lambda 做了一些魔术。通过使用ASM,我真的学到了很多关于JVM字节码的知识,并没有我想象的那么难。
  2. 在 JobRunr 执行字节码分析时,它还参与了 Oracle Quality Outreach 计划。这意味着 JobRunr 已针对即将发布的 JVM 版本进行了测试。这有助于我确保它能够继续在较新的 Java 版本上工作,并且还有助于 Java 社区,因为 JVM 本身中的错误被更早地发现。
  3. 对于需要支持或额外功能的用户,还有 JobRunr Pro。它建立在 JobRunr 之上,并添加了额外的功能,例如具有不同优先级的队列(高优先级作业在低优先级作业之前处理)、作业链、原子批处理和更好的仪表板,增加了搜索功能。

而且,对于售出的任何许可证,都会计划一些新树,因为 5% 的收入将用于teamtrees

JobRunr 可以Quartz 和 Spring(调度支持)等替代工具进行比较。它是开源的,可在LGPLv3 许可下免费用于商业用途。一个PRO版本也已经推出,这增加了功能,如优先级队列和作业链。