【问题标题】:Spring Batch - Error/Bug on MultiResourcePartitionerSpring Batch - MultiResourcePartitioner 上的错误/错误
【发布时间】:2016-02-11 22:13:42
【问题描述】:

MultiResourcePartitioner 没有更新的值

{stepExecutionContext['fileName']} 如果我重命名了之前处理过的文件。

最初,我处理了“FILE1.TXT”,由于某些原因处理失败,然后我将文件重命名为“FILE2.TXT” Spring 批处理仍在寻找“FILE1.TXT”。所以我的解决方法是删除 BATCH_STEP_EXECUTION_CONTEXT 上的所有记录以获取新文件。

我不确定这是否是一个错误,或者我可能遗漏了一些配置,但我希望 spring 批处理将始终拾取目录中的文件,而不是数据库中的文件。

【问题讨论】:

  • 您可以使用jira.spring.io/browse/BATCH 发布错误,这是正常行为,spring batch 无法在外部(文件系统)上看到您的更改,您可以破解 executionContext(手动,通过侦听器)
  • 谢谢迈克尔。我创建了一个错误。

标签: java spring spring-batch


【解决方案1】:

当您开始分区步骤时,会创建所有ExecutionContexts,每个文件一个。重新启动后,分区作业的目标是完成已经分区的工作......也就是分区程序不会再次运行。这是设计的行为。

【讨论】:

  • 我的场景在生产中很常见,其中坏文件需要通过时间戳进行纠正和重命名。正如我所提到的,我已经解决了(从 BATCH_STEP_EXECUTION_CONTEXT 中删除所有记录),但对我来说这是一个 hack。我希望 Spring Batch 能够增强分区步骤行为以处理上述场景。
  • 我认为(我没有尝试过)您可以将步骤设置为在重新启动时重新运行...这可能会重新运行分区程序(对您来说是根本问题)。但是,您要求的是重新启动的行为与不正确的初始运行不同。按照设计,重新启动应该重新启动之前定义的工作。您可以创建自己的分区器,该分区器使用其他方法来定义分区,以便拾取新文件……但这与您的用例直接相关。
  • 假设我不需要重启功能。如果 Spring Batch 有一个布尔属性配置,可以选择性地拾取目录中的文件,那会很好吗?
  • 这不是分区器的功能......这是分区步骤的工作方式。您是否尝试通过设置allow-start-if-complete=true 来配置要重新运行(而不是重新启动)的步骤?
  • 我已经尝试了重新运行选项,即使我重命名了文件,单线程作业也没有问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2017-05-11
  • 2017-10-14
  • 2015-05-19
  • 2018-09-18
相关资源
最近更新 更多