我只使用了一个步骤,该步骤使用了面向块的处理(ItemReader、ItemProcessor、ItemWriter(从文件中读取数据,处理数据(后面有许多业务逻辑和条件(,最后一步是将数据写入数据库。
我发现有点棘手的部分是处理器部分,我不能真正添加条件流,因为我既使用块处理,也不使用复合处理器,因为处理某些流需要满足一些条件(在对数据进行多次检查后,有时会导致直接数据返回(。
有没有更好的方法来实现所有这些具有许多条件和检查的业务逻辑,或者有没有一种方法可以在某个条件下使用spring-batch中的chunk处理来调用另一个ItemProcessor中的ItemProcessor?
谢谢
没有最好的方法。这取决于用例。因此,我将尝试提供一些指导。
面向块的处理模型设计为具有以下契约的单个项目处理器:给定一个输入项目,项目处理器可以具有以下结果之一:
- 返回相同的项(或转换后的项(:在这种情况下,该项将传递给编写器
- 返回
null
:在这种情况下,项目将被过滤(即不传递给编写器( - 抛出一个异常:在这种情况下,如果步骤是简单的面向块的步骤,则该步骤将失败;如果步骤是容错的面向块步骤,则将根据重试/跳过策略重试/跳过项目
现在,如何在项目处理器中实现逻辑取决于您自己。例如:
- 将多个项目处理器组合为一个(如Spring Batch提供的
CompositeItemProcessor
( - 将处理委托给其他项目处理者
- 调整现有类以充当项处理器(如Spring Batch提供的
ItemProcessorAdapter
或FunctionItemProcessor
( - Etc
有几个用例可以用项目处理器实现,如数据转换、筛选、验证等。您可以在参考文档的项目处理部分找到更多详细信息。
你真正需要明确定义的是,整个验证过程(作为一个黑匣子(的结果是什么,无论它有多复杂,然后选择最佳模式来实现它在你的情况下(请注意我是如何说"在你的情况下最好"的,因为没有绝对的最佳方式(。