用例是从REST Web服务(百万对象列表)读取大量数据,处理它们并将它们写回某个地方。问题是我不想一次性从 Web 服务读取所有数据。我想从 Web 服务读取总结果的子集,一次读取几条记录/对象,这样我就不会冒着从 spring 批处理读取器一次性读取所有数据而导致内存不足的风险。有没有办法做到这一点?Spring Batch 提供了从外部服务(而不是从数据库或平面文件)读取ItemReaderAdapter
,但它除了支持委派某些调用外,没有什么特别之处。我想做一些JDBCCursorItemReader
读取位置的事情,或者更确切地说是从数据库流式传输而不是一次读取所有内容。
http://forum.spring.io/forum/spring-projects/batch/73040-default-webservice-reader-implementation 在这里,他们谈论缺乏Web服务的阅读器。
https://stackoverflow.com/a/25025898/153940 还提到了Spring Batch如何没有Web服务ItemReader
您是正确的,Spring Batch 不提供 Web 服务ItemReader
实现。 原因是"Web服务"的定义有点太模糊,无法标准化读者。
话虽如此,您可以通过扩展AbstractPagingItemReader
(http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/database/AbstractPagingItemReader.html) 并在那里添加适合您的 Web 服务的逻辑来轻松实现自己的逻辑。