首页 > 解决方案 > 如何在使用 Java 和 Spring 的 REST Web 服务中等待()?

问题描述

我正在开发一个 Spring Boot 微服务,这个微服务与另一个微服务通信以使用 REST 接收一些数据。像这样的东西:

public class PdfClient {

    private ErternMicr externMicr;

    @Autowired
    public PdfClient(ErternMicr externMicr) {
        this.externMicr = externMicr;
    }

    public String getData(String pdfId) {
        String pdf = "0";
        pdf = externMicr.getPdfData(pdfId);
        return pdf;
    }
}

因此,当externMicr.getPdfData(pdfId)调用此方法时,我使用 REST 从另一个微服务获取一些数据。我需要做的是我不想等待很长时间才能收到数据,我想调用这个方法3次,每次10秒,如果这段时间内没有数据,返回将是“0”。我怎样才能做到这一点?任何反馈将不胜感激!谢谢!

标签: javaspringrestspring-bootwait

解决方案


有几种方法可以做到这一点,您可以尝试使用并发包中的 Executor:

final ExecutorService restService = Executors.newSingleThreadExecutor();

try {
     final Future<String> pdfFuture = restService.submit(() -> {
         // PUT YOUR PDF CODE HERE
         return pdf;
     });

     String pdfFile = pdfFuture.get(10, TimeUnit.SECONDS);
} catch (final TimeoutException e) {
    // TIMEOUT!
    return "0";
} finally {
    restService.shutdown();
}

您可以将此作为您要实现的目标的基础。


推荐阅读