我写了一个处理列表列表的 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@Overridepublic 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: " + mailingDocsEntity.getMailingId()); ..code to get the file //If the file is not a pdf convert it String fileExtension = readFromSpResponse.getFileExtension(); String fileName = readFromSpResponse.getFileName(); byte[] fileBytes = readFromSpResponse.getByteArray(); try { //Do checks to make sure PDF file is being sent if (!"pdf".equalsIgnoreCase(fileExtension)) { //Only doc, docx and xlsx conversions are supported ...Building REquest object //make async call to pdf conversion service pdfService.convertDocxToPdf(request, mailingDocsEntity); } else { logger.error("The file cannot be converted to a pdf.\n" ); } } } 我原来的批处理作业是同步的,我正在转换为异步以加快处理速度。我确实尝试寻找类似的问题,但找不到足够的信息。任何指示或帮助都非常感谢。
添加回答
举报
0/150
提交
取消