当前位置: 首页 > 知识库问答 >
问题:

基于Cron的工作,在数据库中

东方旭东
2023-03-14

我试图写一个过程,它从存储在数据库中的一组记录中读取cron表达式,并运行一个作业(如果该表达式在接下来的一个小时内触发,则执行一个程序)。数据库中带有cron表达式的记录可以有不同的触发时间(如星期五或每小时等)。

带有cron表达式的表示例。

----------

0 0 12 * * ?   , 12Noon, AJOB
----------

0 11 11 11 11 ?  , Nov 11, BJOB
----------

0 15 10 * * ? , EveryDay 10: 15, XJOB
----------

用户可以更新表中的crons。

设计这种应用程序的最佳方式是什么?

我在这里看到的主要问题如下:假设我每1小时运行一次工作,并在接下来的一个小时内记录计划运行我的工作,这看起来都很好,当应用程序启动时。如果应用程序停机2小时,我们可能会错过一些需要在那个时候触发的工作。

如何编写此类应用程序,同时牢记应用程序可能会失败,但我们不应该在停机期间错过任何cron?

cron API也有nextTriggerTime,但对以前触发时间的支持要少得多。

共有2个答案

尉迟正平
2023-03-14

您可以使用Quartz,它是一个可以集成到Java的作业调度库。它可以存储并触发cron作业和简单作业。它也有失火策略,你可以利用它来避免任何触发。

艾文斌
2023-03-14

由于Akka是问题标签之一,我想您正在寻找基于Akka的解决方案。

对于JVM中类似cron的作业调度器,可以直接使用Quartz(正如Ashiq所建议的那样),它是Java,应该可以直接集成到Scala Akka项目中。另外,看看akka石英调度器。它与Akka集成良好,并提供cron utils。

在申请方面:

  1. 数据库或磁盘中维护一个检查点表,以显示“如果cron job ID=X已运行”
 类似资料:
  • 基于FMDB的数据库增删改查Demo。其中包括 statusBar 上显示Log的用法。仅支持ARC。比较适合新手。 [Code4App.com]

  • 问题内容: 是否有任何库在Java中创建使用文件作为数据库的程序,而不必在要使用它的计算机上安装数据库服务? 问题答案: Derby和Hypersonic SQL均可在内存和服务器模式下运行。

  • 问题内容: 我知道有三种不同的,流行的非SQL数据库类型。 键/值:Redis,Tokyo Cabinet,Memcached ColumnFamily:Cassandra,HBase 文件:MongoDB,CouchDB 我已经读了很长的博客,但对它的了解却很少。 我知道关系数据库,并且在MongoDB / CouchDB等基于文档的数据库中徘徊。 谁能告诉我这些和清单上的两个前者之间的主要区别

  • 我如何才能显示一个包含姓名、性别和出生日期的数据表,而只显示今天出生的人? 使用来自jdbc的java连接。 也就是说,我有一张分别于2015年6月15日、2015年5月13日和2015年6月17日出生的3个孩子的表格。 逻辑执行后,只有一个DOB在2015年6月17日(今天的日期)的孩子会出现在桌面上。

  • 更新:我已经缩小了问题的范围,所以我正在删除不必要的代码和示例: 更新2:在让cron作业以12小时的间隔运行相当长的一段时间后(每个都以成功告终,但没有用BQ编写任何内容),我们震惊地发现,大约一周后,其中一个cron作业确实成功写入BigQuery,以及声明“此请求导致为您的应用程序启动一个新进程(...)”的堆栈驱动程序日志,如下所述。以下作业再次停止写入。现在我想知道这是否与缓存的应用程序

  • 本文向大家介绍基于Docker的PHP调用基于Docker的Mysql数据库,包括了基于Docker的PHP调用基于Docker的Mysql数据库的使用技巧和注意事项,需要的朋友参考一下 docker简介: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不