【问题标题】:Best way to implement multiple business logic in ItemProcessor在 ItemProcessor 中实现多个业务逻辑的最佳方法
【发布时间】:2021-06-21 10:10:44
【问题描述】:

我只使用了一个使用面向块的处理(ItemReader、ItemProcessor、ItemWriter)的步骤, 从文件中读取数据,处理数据(后面有很多业务逻辑有条件),最后一步就是将数据写入数据库。

我发现有点棘手的部分是处理器部分,我不能真正添加​​条件流,因为我既不使用复合处理器也使用块处理,因为处理某些流需要满足一些条件(在对数据 - 有时会导致直接数据返回)。

有没有更好的方法来实现所有这些具有许多条件和检查的业务逻辑,或者在特定条件下使用 Spring Batch 中的块处理来调用另一个 ItemProcessor 中的 ItemProcessor?

谢谢

【问题讨论】:

  • 查看装饰器、责任链和策略模式。对于此类问题,他们将成为您最好的朋友。
  • 感谢@RichardBarker 提出的解决方案,这意味着我将只使用一个 ItemProcessor 并且实现可能是这些模式之一?
  • 基本上,是的。这些模式中的一种或多种就可以解决问题。您的 ItemProcessor 可以启动责任链,并且链的每个部分决定它下一步的去向。装饰器将让您动态更改执行流程。策略类似。模式是解决计算机编程问题的起点之一
  • 感谢@RichardBarker 的帮助,我真的需要一些指导 :)) 我会做一些研究并开始实施其中一种或多种模式
  • 如果您得到答案,请在此处发布并告诉我们!我们很乐意看到它,来自未来的人们可以从中受益!

标签: java spring-boot spring-batch chunks


【解决方案1】:

没有最好的方法。这取决于用例。所以我会尽力提供一些指导。

面向块的处理模型设计为具有具有以下合同的单个项目处理器:给定输入项目,项目处理器可以具有以下结果之一:

  • 返回相同的项目(或转换后的项目):在这种情况下,项目将被传递给作者
  • 返回null:在这种情况下,项目将被过滤(即不传递给作者)
  • 抛出异常:在这种情况下,如果是简单的面向块的步骤,则该步骤将失败,或者如果该步骤是容错的块,则将根据重试/跳过策略重试/跳过该项目-定向步骤。

现在,如何在项目处理器中实现逻辑取决于您。例如,您可以:

  • 将多个项目处理器组合成一个(如 Spring Batch 提供的 CompositeItemProcessor
  • 将处理委托给其他项目处理者
  • 调整现有类以充当项目处理器(如 Spring Batch 提供的 ItemProcessorAdapterFunctionItemProcessor

项目处理器可以实现多种用例,例如数据转换、过滤、验证等。您可以在参考文档的Item processing 部分找到更多详细信息。

您真正需要明确定义的是整个验证过程(作为黑盒)的结果是什么,无论它多么复杂,然后才选择最佳模式来实现它在您的情况下(请注意我所说的“在你的情况下最好的”,因为没有绝对最好的方法)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2020-09-24
相关资源
最近更新 更多