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

Quartz调度程序:维护事件作业元数据中的已处理文件列表

狄高畅
2023-03-14

我们在应用程序中使用Quartz scheduler扫描特定文件夹中的任何新文件,如果有新文件,则启动应用程序中的相关工作流来处理它。为此,我们创建了自定义侦听器对象,该对象与一个作业和一个触发器相关联,该触发器每5分钟轮询一次文件位置。

要求是只处理到达该文件夹位置的新文件,而忽略已经处理的文件。此外,我们不希望文件夹位置随着大量文件而大幅增长(否则会减慢文件夹扫描速度)--所以在工作流结束时,我们实际上删除了源文件。

为了实现它,我们决定在作业元数据中维护已处理文件的列表。因此,在每次轮询时,我们从作业元数据中获取已处理文件的列表,将其与当前文件列表进行比较,如果该文件尚未处理,则启动相关的处理流。

为了解决这个问题,我们决定用文件夹的当前快照刷新作业元数据中已处理文件的列表。这样,由于我们在每个工作流的末尾从文件夹位置删除已处理文件,因此已处理文件的列表仍然处于限制状态。但是我们开始有问题的处理重复的文件,如果它以相同的名字到达第二天。

什么是实现这一需求的最佳方法,并确保我们不会处理以相同名称到达的重复文件?我们是否应该考虑在外部数据库中放置已处理文件列表而不是作业元数据的方法?我正在寻找实现此解决方案的推荐方法。谢谢!

共有1个答案

岳炎彬
2023-03-14

我们最近有一个类似的请求与我们的调度程序。如果您在linux上,为什么不使用inotify这样的解决方案呢?其他系统可能有其他方法来监视文件系统事件。

我们的解决方案是在每个创建事件中触发一些文件处理,然后每隔x天删除旧文件(类似于Walen DB建议)。在这种情况下,列表不会膨胀太多,重复的文件可以在他们自己的具体情况下处理。

(对不起,我还没有权利发表评论。)

 类似资料:
  • 我正在寻找解决应用程序中存在的一个问题的设计方法的指导。 我们在Java应用程序中安排了作业,并且使用了Quartz调度器。我们的应用程序可以有数千个作业,这些作业执行以下操作: 扫描文件夹位置以查找任何新文件。 如果有新文件,则启动关联的工作流以处理该文件。 null 如有任何指导,将不胜感激。在我看来,对于持续处理新文件的应用程序来说,这是一个常见的用例--因此需要寻找最佳的方法来解决这个问题

  • 我用的是石英2.2。1和mysql用于job store,用于创建新的job,它用旧job数据覆盖mysql表中的表内容。没有错误。 这是我的代码: 和我的属性文件: 我做错了什么。 对于每个作业创建,表数据都被新的作业详细信息覆盖。感谢您的关注。

  • 我正在研究一个用例,其中我安排了一个cron作业(通过石英),它从数据库中读取某些条目并处理它们。现在,在每个计划中,我可以获得数千条需要处理的记录。处理每条记录需要时间(以秒/分钟为单位)。目前,所有这些记录都在单个节点(由quartz选择的节点)上进行处理。现在,我面临的挑战是并行化这些记录处理。请帮助我解决以下问题: 如何将这些记录/任务分发到计算机群集 如果任何计算机在处理少量记录后发生故

  • 我们有一个使用Spring Framework在Tomcat中运行的Web应用程序。我们需要为循环操作添加一些计划作业。为此,我们遇到了Quartz Scheduler,并遵循了使用Quartz with Spring配置作业的教程,并按预期计划并运行了作业。 所以我们有一些任务是在应用程序启动时安排的。现在我们希望用户手动运行作业并更改作业的触发器,但是我们需要将这些更改持久化到数据库中。因此,

  • 我正在寻找最好的解决方案,以创建一个java web应用程序,以生成Excel/PDF格式的报告。类似于Google Adwords的东西,用户可以创建日程报告,并在以后生成报告时下载。 我正在考虑开发一个java应用程序,在其中用户记录,选择一个预先定义的报告,并提供输入参数(如报告日期等),这个请求将被排队或保存为Quarts作业(首选持久队列)。一个作业将监视队列/作业并执行该作业,生成报告

  • 我正在使用Quartz调度器,但我不知道如何并行运行作业。配置文件中有什么东西可以允许我这样做吗?