【问题标题】:Expired job executions in Spring BatchSpring Batch 中的过期作业执行
【发布时间】:2014-06-25 09:24:55
【问题描述】:

问题

用户可以提交数据以生成报告,从而触发 spring-batch 作业。如果(由同一用户或其他用户)提交了相同的数据,则应在已生成报告的前提下生成相同的报告,以使 Spring Batch 不会启动新作业。

为了让事情更复杂一点,生成的报告会在 90 天后过期。这背后的想法是,从用于构建报告的各种 Web 服务收集的数据可能已经过时。因此,应在 90 天后使用来自这些网络服务的新数据重新生成报告。

问题

  1. 当作业已经运行时,我如何才能发现该作业的作业执行 ID?此 ID 在 URL 中用于唯一标识报告。 JobExplorer 在查询 Spring Batch 数据方面受到严重限制。

  2. 如何才能在 90 天后触发另一个作业实例?问题是给定重复的作业参数,JobInstanceAlreadyCompleteException 将被抛出。我必须对 90 天进行编码是否有额外的识别参数,还是有更简单的方法?

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    清理旧作业必须使用业务方法以及过期报告。
    在此前提下,您可以尝试不同的路径来解决您的问题:

    1. 每个用户启动不同的作业,具有相同的报告属性,但 一个额外的工作参数,使每个工作都不同
    2. 第一步是检查 - 使用业务方法 - 该报告是否有正在运行的作业;在这种情况下,通知用户他必须等待或稍后重试(使用决策者)
    3. 第二步是使用业务方法检查是否有已完成 - 未过期 - 报告;如果是,则检索并显示给用户(使用第 2 步的决策者)
    4. 生成报告(如有必要,删除旧的)
    5. 向用户显示报告。

    当然,生成的报告元数据表与 SB 表不同,应该使用与域上下文相关的 DAO(您的案例中的报告)进行访问。

    这是一个有效的替代方案吗?

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 2019-11-21
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多