我有一个步骤,包括读取器,处理器和编写器,用于将数据写入文件。
根据处理的数据类型,我想将其写入不同的位置。
如何在运行时指定应写入数据的阅读器或处理器?
示例(可能是愚蠢的):
read(items) - > process(items)> write(to apple folder)
read(items) - > process(items)> write(to tomato folder)
我不知道这些物品的顺序是什么,也不知道它们的类型。我只在读者和处理器中发现了这一点,但作者再次不知道它处理的是什么。
有没有办法让这种情况发生(比如reader.getWriter(。。setAttribute()或使用某种会话)?
答案 0 :(得分:0)
组合是Spring Batch中的一个强大主题。在这种情况下,您将要实现一个复合ItemWriter
,它根据需要编写的位置委托给子ItemWriter
。您有两个选项,实现自己的选项或使用Spring Batch提供的ClassifierCompositeItemWriter
。它实际上取决于您的选择过程的逻辑。您可以在此处的文档中详细了解ClassifierCompositeItemWriter
:http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html
使用此方法时的一个重要注意事项是,代理ItemWriter
不会自动注册为ItemStream
。您需要手动执行此操作。您可以在此处了解如何执行此操作:http://docs.spring.io/spring-batch/trunk/reference/htmlsingle/#delegatePatternAndRegistering