Spring 批处理框架

Spring Batch Framework

我无法确定 Spring 批处理框架是否适用于以下要求。我需要专家的意见。

以下是我的要求:

Read multiple Oracle tables (at least 10 tables including both transaction and master), do complex calculation based on the business rules, Insert / Update / Delete records in transaction tables.

我确定了以下两个设计:

Design # 1:

项目Reader: Select 来自关键交易的符合条件的记录 table.

ItemProcessor: 使用 ItemReader 检索到的记录中可用的键从 DB 中获取额外的详细信息。(这将需要多个 DB 事务) 进行验证和计算,并将要写入数据库的详细信息作为列表中的对象添加。

ItemWriter:使用CustomItemWriter写入对象中可用的详细信息(插入/更新/删除操作)

通过这种设计,我们可以实现并行处理,但会增加数据库事务的数量

Design # 2:

第 1 步

ItemReader: 使用 Composite Item Reader (Group of ItemReaders) 读取所有需要的 tables.

ItemWriter: 在执行上下文中将结果集保存为对象列表(每个 table 一个列表)

步骤#2

ItemReader: 检索执行上下文中可用的对象列表,并根据业务处理将它们分组为一个对象列表,以便处理器可以处理它们。

IremProcessor: 处理 ItemReader 返回的对象块。 进行验证和计算,并将要写入数据库的详细信息作为列表中的对象添加。

ItemWriter:使用CustomItemWriter写入对象中可用的详细信息(插入/更新/删除操作)

通过这种设计,我们可以减少 DB 事务的数量,但我们正在延迟处理,直到所有 table 记录都被检索并存储在执行上下文中,即我们未使用 SpringBatch.

提供的并行处理

请告知使用Spring批处理是否可行,或者我们需要使用常规Java程序。

根据我的理解,Spring 批处理与数据库批处理操作无关(或者至少 'batch' 这个词在这两种情况下具有不同的含义。)Spring batch 用于创建具有多个步骤的流程,如果其中一个流程步骤失败,您将有机会重新启动流程(无需重复先前完成的流程步骤。)

好消息是您的问题描述与 spring-batch 的一个非常常见的用例相匹配。坏消息是问题描述过于笼统,除了已经提供的评论之外,无法提供关于特定设计的更多有意义的输入。

Spring-batch 将类似于 JCL 和 ISPF 的功能从大型机世界带入 java 上下文。

Spring 批处理提供了一个用于组织和管理流程边界的框架。很多ETL和bigdata的操作很自然,但不是唯一的写这些流程的方法。

如果您的流程可以分解为多个独立的步骤,那么 spring 批处理是您的不错选择。

Itemreader 应该(逻辑上)是一个迭代器,返回表示一个逻辑工作单元 (luw) 开始的单个对象。 luw 对象被分块器捕获并组装成您配置的大小的集合,然后传递给处理器。然后将处理器的结果传递给编写器。在以 RDBMS 为中心的进程的上下文中,提交发生在编写器操作结束时。

无论您需要什么,在这些步骤的每一部分中发生的事情都是 100%(普通的旧 java)。框架的意义在于把你从复杂中解放出来,让你解决问题。