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



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

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

有没有更好的方法来实现所有这些具有许多条件和检查的业务逻辑,或者有没有一种方法可以在某个条件下使用spring-batch中的chunk处理来调用另一个ItemProcessor中的ItemProcessor?

谢谢

没有最好的方法。这取决于用例。因此,我将尝试提供一些指导。

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

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

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

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

有几个用例可以用项目处理器实现,如数据转换、筛选、验证等。您可以在参考文档的项目处理部分找到更多详细信息。

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

最新更新