spring - Spring批处理步骤的不同组合

标签 spring workflow spring-batch spring-integration

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

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

我将添加每个系统作为 Spring Batch 中的一个步骤,然后使用 Spring Integration 我将对系统特定流程进行建模 - 例如FTP 获取文件,发送 JMS/SMAPI 请求,接收 JMS 响应,返回 FTP 文件。等等

我的问题是:

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

最佳答案

问题一: 一起使用 Spring-Integration 和 Spring-Batch 是个好主意。

问题二: 使用 Spring-Batch,您有很多选项可以扩展,从而提高性能。您可以并行启动整个作业,可以并行执行步骤,可以并行执行 block ...基本问题是:

  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”,它调用选项 1 中提到的特定“jobSystem”作业;像

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 的流畅 API 以编程方式定义您的作业,您可以自由创建一个因此在运行时定义作业。

关于spring - Spring批处理步骤的不同组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404671/

相关文章:

java - Spring:用于动态查询的通用 RowMapper

java - 找不到 [javax.sql.DataSource] 类型的合格 bean

Git 作为部署、开发和备份

Spring Batch/Azure 存储帐户 blob 资源 [container"foo", blob ='bar' ] 无法解析为绝对文件路径

java - spring在多个子目录中批处理多个源

工作流图作为 RDF?

java - Spring AWS S3 : How to upload an image and get a URL which shows it rather than downloads it?

java - 我应该为未经身份验证的用户使用 session 吗?

java - 在 Spring MVC 中,如何在使用 @ResponseBody 时设置 mime 类型 header

java - Spring Web Flow 可以在非 UI 上下文中使用吗?