gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:40:54 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 试图允许的关注点分离但我需要查看您的更多配置才能提供帮助。

关于spring-batch - 关于面向 block 的步骤与现实的 Spring Batch 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837170/

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