在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
那么文档有错吗?还是我遗漏了一些配置,使它的行为像文档一样(没有找到任何东西)。
我遇到的问题是,现在每个consequentive读取都取决于处理器的状态。读取器是并行读取两个源的组合,根据其中一个源中的读取项,在一次读取操作期间仅读取第一个、第二个或两个源。但要读取的源的状态在处理器中进行。目前唯一的解决方案是提交间隔1,这对于性能来说不是很理想。
简短的回答是,你是正确的,我们的文档在组块模型上并不准确。是需要更新的东西。这是有原因的(它们主要与如何处理容错有关)。但这并不能解决你的问题。对于您的用例,有几个选项:
我正在处理一个使用Spring批处理的项目。在本项目中,我使用Spring批处理后期绑定,其中我使用JobParameters注入了一个参数(将用作SQL读取器查询的条件的字符串)。目前,我正在使用进行后期绑定,所有操作都非常正常。 这里我要问的是何时使用以及何时使用。我已经阅读了Spring批处理参考文件,并在谷歌上搜索了StepScope和jobscope。我得到的只是: a.StepScop
我有一个作业步骤,从数据库读取并将输出写入平面文件,然后创建一个报告。 如果该步骤失败,我希望它重新启动,从头开始处理。我不想将任何恢复合并到这一步中。 实现Spring Batch的最佳方式是什么,这样该tasklet就不会在过程中执行任何块处理并触发恢复?
我第一次使用Spring batch,我需要一些关于验证步骤的帮助。 在真正开始我的批处理作业之前,我需要对要处理的文件进行一些验证,例如: 使用数据库中的信息检查名称 使用来自系统和数据库的信息检查第一行和最后一行(特定) 用第一行中的数据检查总行号 在那之后,我真的可以开始我的批处理工作了。 我认为有多个步骤相互链接,第一步进行验证,如果文件无效,则进入错误步骤。 我如何进行验证?所有找到的阅
我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch
我在Spring中设置了几个线性步骤。如果在任何一点上,一个步骤失败了,作业应该失败。 这些步骤包括多个微线程,然后是一个基于块的步骤。即。: 步骤1 任务1 小任务2 读者 处理器 作家 如果出现问题,最明显的做法就是抛出异常。Spring Batch将处理此问题并记录所有内容。这种行为,尤其是打印堆栈跟踪,是不可取的,如果作业可以优雅地结束,并将状态设置为。 Tasklet当前直接在上设置。它
在我的Spring boot和Spring batch应用程序中,我有这样一个步骤: 我的作家是一个空的,如下所示: 现在,在我的处理器中,我有: 问题:由于所有对象都传递给处理器,我可以在处理器本身中处理它们,而不是使用任何转换等,因为我的目的通过使用处理器来解决,这是一个好的做法吗?或者我必须使用作家/自定义作家来完成工作?