我写了一个处理列表列表的 spring 批处理作业。
Reader 返回列表列表。Processor 处理每个 ListItem 并返回处理过的 List。Writer 从 List of List 向 DB 和 sftp 写入内容。
我有一个用例,我从 Spring 批处理器调用 Async REST api。在 ListenableFuture 响应中,我实现了 LitenableFutureCallback 来处理成功和失败,这按预期工作,但在异步调用返回某些内容之前,ItemProcessor 不会等待来自异步 API 的回调并将对象(列表)返回给编写器。
我不确定如何实现和处理来自 ItemProcessor 的异步调用。
我确实读过 AsyncItemProcessor 和 AsyncItemWriter,但我不确定在这种情况下是否应该使用它。
我还想过在 AsyncRestTemplate 的 ListenableFuture 响应上调用 get(),但根据文档,它会阻塞当前线程,直到它收到响应。
我正在寻求有关如何实现这一点的帮助。下面的代码片段:
处理器:
public class MailDocumentProcessor implements ItemProcessor<List<MailingDocsEntity>, List<MailingDocsEntity>> {
... Initialization code
@Override
public List<MailingDocsEntity> process(List<MailingDocsEntity> documentsList) throws Exception {
logger.info("Entering MailingDocsEntity processor");
List<MailingDocsEntity> synchronizedList = Collections.synchronizedList(documentsList);
for (MailingDocsEntity mailingDocsEntity : synchronizedList) {
System.out.println("Reading Mailing id: …Run Code Online (Sandbox Code Playgroud)