当前位置: 首页 > 知识库问答 >
问题:

Spring批处理步骤的不同组合

谈旺
2023-03-14

我正在做一个项目,我将使用Spring批处理和Spring集成来创建工作流系统。这个工作流系统应该能够从队列中读取消息,这实际上是来自客户端的作业请求,根据作业请求类型,我需要调用一些7-8系统

每个系统从某个位置读取输入文件(通常是一个集中存储系统,其中所有输入文件都存储在客户提交的文件中),对其进行处理,然后将其传递给下一个系统,最终我应该能够响应客户端,例如SUCCESS如果它被所有系统成功处理并失败,如果任何系统未能处理文件,如果失败,客户端应该能够从实际失败的步骤重新启动失败的作业。

我将在Spring批处理中添加每个系统作为一个步骤,然后使用Spring集成,我将为系统建模特定的流——例如FTP获取文件、发送JMS/SMAPI请求、接收JMS响应、返回FTP文件。等

我的问题是:

  1. 这是正确的方法吗?
  2. 如果“是”,使用Spring Batch和Spring集成时的性能调整注意事项是什么?
  3. 由于所有系统不会一直以相同的顺序调用,因此如何使用Spring Batch作为潜在的Spring Batch作业编写所有可能的组合?

共有1个答案

弘思聪
2023-03-14

问题1:同时使用Spring集成和Spring Batch是个好主意。

问题2:对于Spring Batch,您有很多可扩展的选项,因此可以提高性能。你可以并行地启动整个作业,并行地执行步骤,并行地执行块。。。基本问题是:

  1. 瓶颈在哪里
  2. 并行化在哪里提高了性能

问题3:基本上,Spring Batch不是一个工作流系统。它支持具有固定步骤顺序的作业。

选项1:可以在各自的作业(“jobSystemA”、“jobSystemB”)中对每个系统进行建模。这样,您就可以在“集成”层中实现流的逻辑,并按照正确的顺序为每个系统启动新作业。

选项2:如果您有固定数量的可能流,例如

Flow 1:
Step A (System A)
Step B (System B)
Step C (System C)

Flow 2:
Step A (System A)
Step C (System C)
Step B (System B)

您可以为每个可能的“流”定义一个作业,并将对特定系统作业的调用实现为“StepJob”,它调用特定的“jobSystem”——选项1中提到的作业;差不多

JobFlow1
  Step1 {JobStep call jobSystemA}
  Step2 {JobStep call jobSystemB}
  Step3 {JobStep call jobSystemC}

JobFlow2
  Step1 {JobStep call jobSystemA}
  Step2 {JobStep call jobSystemC}
  Step3 {JobStep call jobSystemB}

选项3:如果使用SpringBatch的fluent API以编程方式定义作业,则可以自由创建一个用于在运行时定义作业的API。

 类似资料:
  • 我正在尝试修复Spring Batch中的一个问题,这个问题最近一直困扰着我们的系统。我们有一份工作,在大多数情况下都很好。下载和处理数据是一个多步骤的工作。 问题是有时工作会爆棚。也许我们试图连接到的服务器抛出了错误,或者我们在工作进行到一半时关闭了服务器。此时,下次我们的quartz调度程序尝试运行该作业时,它似乎什么也不做。以下是此作业定义的删节版本: 委婉地说,我是Spring Batch

  • 我第一次使用Spring batch,我需要一些关于验证步骤的帮助。 在真正开始我的批处理作业之前,我需要对要处理的文件进行一些验证,例如: 使用数据库中的信息检查名称 使用来自系统和数据库的信息检查第一行和最后一行(特定) 用第一行中的数据检查总行号 在那之后,我真的可以开始我的批处理工作了。 我认为有多个步骤相互链接,第一步进行验证,如果文件无效,则进入错误步骤。 我如何进行验证?所有找到的阅

  • 使用Spring Batch 3.0.4.Release。 我将作业配置为使用分区步骤。从机步骤使用块大小1。任务执行器中有六个线程。我使用从六到数百的各种网格大小来运行这个测试。我的网格大小是从StepExecutions的数量,我希望==我的分区器创建的ExecutionContexts的数量。 下面是Java配置代码:

  • 我正在寻找一些关于测试Spring批处理步骤和步骤执行的一般性意见和建议。 我的基本步骤是从api读入数据,处理实体对象,然后写入数据库。我已经测试了快乐之路,这一步成功地完成了。我现在想做的是在处理器阶段数据丢失时测试异常处理。我可以单独测试processor类,但我更愿意测试整个步骤,以确保在步骤/作业级别正确反映流程故障。 我已经阅读了spring批量测试指南,如果我是诚实的,我对它有点迷茫

  • 我正在尝试在Spring批处理中并行运行多个作业。在谷歌上搜索了很多之后,我遇到了JobStep。有没有人使用过JobStep可以解释如何使用它来并行运行作业,或者有没有其他方法可以并行运行2个独立的作业,即当我启动批处理时,2个作业应该开始并行运行。我的要求就像 当我的应用程序启动时,两个作业都应该开始运行。使用spring batch是否可以这样做 编辑:我甚至试过这种方法 我面临着例外。sp

  • 我目前正在处理一批数据,这些数据来自一个拥有数百万行的大型SQL数据库。 它在处理器中执行一些处理,包括通过带有连接的大型sql查询对从Reader检索到的行进行分组。 编写器将结果写入另一个表。 问题是此Batch存在性能问题,因为Sql选择查询需要大量时间并且步骤不会在多线程中执行。 因此,我希望在多标题中运行它们,但问题是,这些步骤通过计算具有相同类型的所有行的总数来对行进行分组。 因此,如