我有一个spring批处理作业,预计将根据FIFO顺序处理'N'个作业ID。这个Spring批处理作业有5个步骤。
我们使用DECIDER来确定是否有更多的job-id。如果是,请转到第一步并运行该job-id的所有步骤。
我在spring-batch发出的日志中看到“duplicate step”消息,在第一个作业中的步骤(例如job-id=1)获得未知状态之前,该消息似乎没有问题。在这种情况下,第二个作业的相同步骤(job-id=2)无法启动,并声明“步骤处于未知状态,重新启动是危险的....”。是否有更好的方法来定义spring-batch作业来处理'n'个作业ID。
有一个表保存职务信息。每个作业在订单表中下订单。有可能需要在同一天处理两个工作。作业可以插入/更新具有相同修订(其他详细信息不同)的相同订单号,也可以插入/更新相同订单号的不同修订。批处理程序必须根据作业表中的success_time在FIFO模型中处理这些作业。
Job_Id job_name success_time 1 job1 2014-09-29 10:00:00 2 job2 2014-09-29 13:00:00 Order_id order_number order_revision order_details job_id 1 ABC 1 Test1 1 2 XYZ 1 Test2 1 3 ABC 2 Test1-Rev2 2
<batch:step id="abstractParentStep" abstract="true">
<batch:tasklet>
<batch:chunk commit-interval="100" />
</batch:tasklet>
</batch:step>
<-- Using same reader and writer to simplify scenario depiction -->
<batch:job id="OrderProcessingJob">
<batch:step id="Collect-Statistics-From-Staging-Tables" next="Validate-Order-Mandatory-Fields" parent="abstractParentStep">
<batch:tasklet>
<batch:chunk reader="orderReader" writer="orderWriter" />
</batch:tasklet>
</batch:step>
<batch:step id="Validate-Order-Mandatory-Fields" next="Validate-Item-Mandatory-Fields" parent="abstractParentStep">
<batch:tasklet>
<batch:chunk reader="orderReader" writer="orderWriter" />
</batch:tasklet>
</batch:step>
<batch:step id="Validate-Item-Mandatory-Fields" next="decision" parent="abstractParentStep">
<batch:tasklet>
<batch:chunk reader="orderReader" writer="orderWriter" />
</batch:tasklet>
</batch:step>
<batch:decision id="decision" decider="processMoreJobsDecider">
<batch:next on="REPEAT" to="Validate-Order-Mandatory-Fields" />
<batch:end on="COMPLETED" />
</batch:decision>
</batch:job>
当第一个作业的步骤仍然处于未知状态,而第二个作业(因为decider决定还有一个job_id要处理)得到异常消息时,我们遇到了上面提到的异常。
您应该给每个步骤一个唯一的名称。如果使用分区,这将自动为您完成。
请参阅以下要点,文件partitionedsimple.groovy
(只需下载文件并运行groovy
)即可运行所有示例。在step1
中,我们确定随后需要的步骤数(在那里硬编码为3),并将其保存在作业上下文中(首先在步骤上下文中,然后进行升级)。我们创建一个分区步骤partitionedstep
,它将启动3个步骤。它们的名称为repeatedstep:
。在分区中,我们还将一个名为PartitionIndex
的键放在上下文中,这样我们就可以在实现重复步骤的tasklet中检索它。
然后,我们运行一个示例,在该示例中,当它处理第2项时,我们强制它失败。我们得到以下步骤执行:
Status is: FAILED Step executions: 1: step1 2: partitionedStep FAILED 4: repeatedStep:partition_1 5: repeatedStep:partition_2 FAILED 3: repeatedStep:partition_3
Status is: COMPLETED Step executions: 6: partitionedStep null: repeatedStep:partition_1 STARTING 7: repeatedStep:partition_2 null: repeatedStep:partition_3 STARTING
Step executions: 1: step1 2: wrappingStep 3: repeated-1 4: wrappingStep FAILED 5: repeated-2 FAILED
在第二次运行中:
Step executions: 6: wrappingStep 7: wrappingStep 8: repeated-2 9: wrappingStep 10: repeated-3
使用Spring Batch 3.0.4.Release。 我将作业配置为使用分区步骤。从机步骤使用块大小1。任务执行器中有六个线程。我使用从六到数百的各种网格大小来运行这个测试。我的网格大小是从StepExecutions的数量,我希望==我的分区器创建的ExecutionContexts的数量。 下面是Java配置代码:
我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch
我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议。 我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障。 我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫
我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp
我第一次使用Spring batch,我需要一些关于验证步骤的帮助。 在真正开始我的批处理作业之前,我需要对要处理的文件进行一些验证,例如: 使用数据库中的信息检查名称 使用来自系统和数据库的信息检查第一行和最后一行(特定) 用第一行中的数据检查总行号 在那之后,我真的可以开始我的批处理工作了。 我认为有多个步骤相互链接,第一步进行验证,如果文件无效,则进入错误步骤。 我如何进行验证?所有找到的阅
我目前正在处理一批数据,这些数据来自一个拥有数百万行的大型SQL数据库。 它在处理器中执行一些处理,包括通过带有连接的大型sql查询对从Reader检索到的行进行分组。 编写器将结果写入另一个表。 问题是此Batch存在性能问题,因为Sql选择查询需要大量时间并且步骤不会在多线程中执行。 因此,我希望在多标题中运行它们,但问题是,这些步骤通过计算具有相同类型的所有行的总数来对行进行分组。 因此,如