gpt4 book ai didi

spring-batch - 关于面向 block 的步骤与现实的 Spring Batch 文档?

转载 作者:行者123 更新时间:2023-12-04 20:40:50 25 4
gpt4 key购买 nike

关于 documentation Spring Batch 的配置步骤一张清晰的图片描述了读取过程和写入是如何执行的。

read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write

对应(根据文档):
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);

但是,当我调试并在读取器的 read 方法中放置断点并在处理器的 process 方法中放置断点时,我看到以下行为:
read
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write

那么文档是错误的吗?或者我是否缺少一些配置以使其表现得像文档(在那里没有找到任何东西)。

我遇到的问题是,现在每个连续读取都取决于处理器的状态。读取器是并行读取两个源的复合体,根据一个源中的读取项,在一次读取操作期间仅读取第一个、第二个或两个源。但是要读取哪些源的状态是在处理器中进行的。目前唯一的解决方案是提交间隔 1,这对性能来说不是很理想。

最佳答案

简短的回答是,你是对的,我们的文档在分块模型上并不准确。这是需要更新的东西。为什么会这样是有原因的(它们主要与如何处理容错有关)。但这并不能解决您的问题。对于您的用例,有几个选项:

  • 使用 JSR-352 配置配置您的作业 - JSR-352 的处理模型是我们的文档所说的(他们将其视为福音而不是 Spring Batch 真正做的)。由于 Spring Batch 支持 JSR-352,只需更改您的配置和启 Action 业的方式,您就会得到相同的结果。 JSR-352 的一些限制超出了本讨论的范围,但它是一种选择。
  • 另一种选择是按照 Michael Pralow 的建议去做——虽然我理解你对关注点分离的担忧,但听起来你已经打破了这条规则,因为你的处理器正在生成读者需要的输出(或者你是否正在共享该状态)以其他方式?)。
  • 其他选项 - 在不了解您的工作的情况下,可能有其他方法可以很好地构建您的工作(例如将逻辑移入多个步骤等)并且仍然实现 Spring Batch 试图允许的关注点分离,但我d 需要查看更多配置才能在那里提供帮助。
  • 关于spring-batch - 关于面向 block 的步骤与现实的 Spring Batch 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26655281/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com