Spring Batch中的过期作业执行

时间:2014-06-25 09:24:56

标签: spring spring-batch

问题

用户可以提交数据以生成报告,从而触发弹出批处理作业。如果提交相同的数据(由同一用户或其他用户提交),则应生成相同的报告,以便Spring Batch不会在已生成报告的前提下开始新的工作。

为了使事情变得更复杂,生成的报告在90天后过期。这背后的想法是,用于构建报告的各种Web服务收集的数据可能已过时。因此,90天后,应使用这些Web服务中的新数据重新生成报告。

问题

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 每个用户启动一个不同的作业,但具有相同的报告属性 一个额外的工作参数,使每个工作不同
  2. 第一步是检查 - 使用业务方法 - 如果该报告有正在运行的作业;在这种情况下,通知用户他必须等待或稍后重试(使用决策者)
  3. 第二步是使用业务方法检查是否存在已完成 - 未过期的报告;如果是,则检索并向用户显示(对于步骤2使用决策程序)
  4. 生成报告(如有必要,删除旧版)
  5. 向用户显示报告。
  6. 当然,生成的报告元数据表与SB表不同,应使用与域上下文相关的DAO(在您的情况下为报告)进行访问。

    这可以作为有效的替代方案吗?