在 ItemProcessor 中实现多个业务逻辑的最佳方式

Best way to implement multiple business logic in ItemProcessor

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

我发现有点棘手的部分是处理器部分,我无法真正添加条件流,因为我既不使用块处理也不使用复合处理器,因为处理某些流需要满足条件(在做了很多之后检查数据 - 有时会导致直接数据 return).

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

谢谢

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

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

  • Return 相同的项目(或转换后的项目):在这种情况下,该项目将传递给作者
  • Return null:在这种情况下,该项目将被过滤(即不传递给作者)
  • 抛出异常:在这种情况下,如果该步骤是一个简单的面向块的步骤,该步骤将失败,或者如果该步骤是,该项目将根据 retry/skip 策略 retried/skipped容错的面向块的步骤。

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

  • 将多个项目处理器组合成一个(如 Spring Batch 提供的 CompositeItemProcessor
  • 将处理委托给其他项目处理者
  • 调整现有的 class 作为项目处理器(如 ItemProcessorAdapter 或 Spring Batch 提供的 FunctionItemProcessor
  • 等等

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

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