Java 迭代调用RESTful API

Java 迭代调用RESTful API,java,spring,Java,Spring,我正在构建一个业务流程服务层,它调用多个第三方RESTful Api。Api要求我以一定的间隔多次调用它,直到“status”的值为“finished” 语言:Java IDE:STS 应用程序框架:Spring 要求: 每隔30秒打一次电话 如果组合间隔达到或超过5分钟,则失败 Json: 当我需要再打电话的时候 { "id": 1234, "status":"pending } 当我知道它完成了 { "id":1234, "status": "finished" }

我正在构建一个业务流程服务层,它调用多个第三方RESTful Api。Api要求我以一定的间隔多次调用它,直到“status”的值为“finished”

语言:Java IDE:STS 应用程序框架:Spring

要求: 每隔30秒打一次电话 如果组合间隔达到或超过5分钟,则失败

Json:

当我需要再打电话的时候

{
   "id": 1234,
   "status":"pending
}
当我知道它完成了

{
   "id":1234,
   "status": "finished"
}

有没有一个包或某种方法可以不用while循环和ad.sleep()来实现这一点呢?你可以试试@Scheduled Spring annotation。例如:

@Scheduled(fixedRate = 30000)
public void scheduleTaskWithFixedRate()
{
    logger.info("Executed");
}
Spring实现您的场景的方法是:
1) 将bean添加到Spring应用程序java配置中

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler()
{
    return new ThreadPoolTaskScheduler();
}
2) 类中的autowire taskScheduler:

@Autowired ThreadPoolTaskScheduler taskScheduler
3) 使用以下代码在类中使用taskScheduler:

    ScheduledFuture<?> scheduledFuture = taskScheduler.scheduleAtFixedRate(() -> System.out.println("running"), 30*1000);

    taskScheduler.schedule(() -> {
        System.out.println("finish");
        scheduledFuture.cancel(false);
    }, new Date(System.currentTimeMillis() + 5*60*1000));
ScheduledFuture ScheduledFuture=taskScheduler.scheduleAtFixedRate(()->System.out.println(“running”),30*1000;
taskScheduler.schedule(()->{
系统输出打印(“完成”);
scheduledFuture.cancel(false);
},新日期(System.currentTimeMillis()+5*60*1000);

其思想是每30秒安排一次任务执行,并使用另一个任务取消它,该任务将在5分钟内运行一次。好消息是这个taskScheduler由Spring管理。

您可以尝试@Scheduled Spring annotation。例如:

@Scheduled(fixedRate = 30000)
public void scheduleTaskWithFixedRate()
{
    logger.info("Executed");
}
Spring实现您的场景的方法是:
1) 将bean添加到Spring应用程序java配置中

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler()
{
    return new ThreadPoolTaskScheduler();
}
2) 类中的autowire taskScheduler:

@Autowired ThreadPoolTaskScheduler taskScheduler
3) 使用以下代码在类中使用taskScheduler:

    ScheduledFuture<?> scheduledFuture = taskScheduler.scheduleAtFixedRate(() -> System.out.println("running"), 30*1000);

    taskScheduler.schedule(() -> {
        System.out.println("finish");
        scheduledFuture.cancel(false);
    }, new Date(System.currentTimeMillis() + 5*60*1000));
ScheduledFuture ScheduledFuture=taskScheduler.scheduleAtFixedRate(()->System.out.println(“running”),30*1000;
taskScheduler.schedule(()->{
系统输出打印(“完成”);
scheduledFuture.cancel(false);
},新日期(System.currentTimeMillis()+5*60*1000);
其思想是每30秒安排一次任务执行,并使用另一个任务取消它,该任务将在5分钟内运行一次。好消息是这个任务调度器由Spring管理。

您可以使用它,其中一个任务以30秒的间隔调用REST,第二个任务在5分钟后取消第一个任务。Java 8上的示例:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
ScheduledFuture<?> task = scheduledExecutorService.scheduleAtFixedRate(
    () -> System.out.println("some task"), 0, 30, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(() -> {
    System.out.println("shutdown");
    task.cancel(false);
}, 0, 5, TimeUnit.MINUTES);
ScheduledExecutorService ScheduledExecutorService=Executors.newScheduledThreadPool(2);
ScheduledFuture任务=scheduledExecutorService.scheduleAtFixedRate(
()->System.out.println(“某些任务”),0,30,时间单位.s);
scheduledExecutorService.scheduleAtFixedRate(()->{
系统输出打印项次(“关闭”);
任务。取消(false);
},0,5,时间单位为分钟);
当您收到
finished
消息时,您还可以通过
task.cancel(false)取消所有任务

您可以使用此方法,其中一个任务以30秒的间隔调用REST,第二个任务在5分钟后取消第一个任务。Java 8上的示例:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
ScheduledFuture<?> task = scheduledExecutorService.scheduleAtFixedRate(
    () -> System.out.println("some task"), 0, 30, TimeUnit.SECONDS);
scheduledExecutorService.scheduleAtFixedRate(() -> {
    System.out.println("shutdown");
    task.cancel(false);
}, 0, 5, TimeUnit.MINUTES);
ScheduledExecutorService ScheduledExecutorService=Executors.newScheduledThreadPool(2);
ScheduledFuture任务=scheduledExecutorService.scheduleAtFixedRate(
()->System.out.println(“某些任务”),0,30,时间单位.s);
scheduledExecutorService.scheduleAtFixedRate(()->{
系统输出打印项次(“关闭”);
任务。取消(false);
},0,5,时间单位为分钟);
当您收到
finished
消息时,您还可以通过
task.cancel(false)取消所有任务