我无法最终确定Spring Batch框架是否适用于以下要求。我需要专家的意见。
以下是我的要求:
读取多个Oracle表(至少10个表,包括事务表和主表),根据业务规则进行复杂的计算,在事务表中插入/更新/删除记录。
我确定了以下两种设计:
设计#1:
ItemReader:从“关键交易”表中选择符合条件的记录。
ItemProcessor:使用ItemReader检索到的记录中提供的密钥从数据库中获取其他详细信息。(这将需要多个DB事务)进行验证和计算,并将要写入数据库的详细信息作为对象添加到列表中。
ItemWriter:使用CustomItemWriter写入对象中可用的详细信息(插入/更新/删除操作)
通过这种设计,我们可以实现并行处理,但可以增加数据库事务的数量。
设计2:
步骤1
ItemReader:使用Composite Item Reader(Group of ItemReaders)来读取所有必需的表。
ItemWriter:将结果集另存为执行上下文中的对象列表(每个表一个列表)
第2步
ItemReader:检索在执行上下文中可用的对象列表,并根据业务处理将它们分组为一个对象列表,以便处理器可以处理它们。
IremProcessor:处理由ItemReader返回的Object的块。进行验证和计算,并将要写入数据库的详细信息作为对象添加到列表中。
ItemWriter:使用CustomItemWriter写入对象中可用的详细信息(插入/更新/删除操作)
通过这种设计,我们可以减少数据库事务的数量,但是我们要延迟处理,直到所有表记录都被检索并存储在执行上下文中为止,也就是说,我们没有使用SpringBatch提供的并行处理。
请告知使用SpringBatch上面的方法是否可行,还是我们需要使用常规的Java程序。
好消息是,您的问题描述与spring-batch的一个非常常见的用例匹配。坏消息是,问题描述过于笼统,无法在已提供的注释之外提供有关特定设计的大量有意义的输入。
Spring-batch将类似于JCL和ISPF的功能从大型机世界引入到Java上下文中。
Spring批处理提供了一个用于组织和管理流程边界的框架。对于许多ETL和大数据操作来说,这是很自然的事情,但这并不是编写这些过程的唯一方法。
如果您可以将过程分解为谨慎的步骤,那么春季批处理将是您的理想选择。
Itemreader应该(逻辑上)是一个迭代器,它返回一个对象,该对象表示一个逻辑工作单元(luw)的开始。luw对象由分块器捕获,并组装成您配置的大小的集合,然后传递给处理器。然后,处理器的结果将传递给编写器。在以RDBMS为中心的过程中,提交发生在编写者操作结束时。
无论您需要什么,每个步骤中发生的事情都是100%(普通的Java)。该框架的目的是使您摆脱复杂性,并使您能够解决问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句