我有一个Web应用程序,我需要运行一个backgroung进程,该进程将打入Web服务,在收到响应后,它将等待几秒钟(例如30秒),然后再次打入该服务。响应数据可以从非常少到很大变化,因此我不想再次调用该过程,直到完成数据处理为止。因此,它具有时间延迟的递归调用。我打算怎么做:

  • 将ContextListener添加到Web应用程序。
  • 在contextIntialized()方法上,调用invokeWebService(),即任意方法打Web服务。
  • invokeWebService如下所示:
    invokeWebService()
    {
    
    //make request
    
    //hit service
    
    //get response
    
    //process response
    
    timeDelayInSeconds(30);
    
    //recursive call
    invokeWebService();
    
    }
    

  • 请建议我是否做对了。或与线程或调度程序一起使用。请用示例代码回答。

    最佳答案

    您可以使用 ScheduledExecutorService , which is part of the standard JDK since 1.5:

        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable r = new Runnable() {
    
            @Override
            public void run() {
                invokeWebService();
            }
        };
    
        scheduler.scheduleAtFixedRate(r, 0, 30, TimeUnit.SECONDS);
    

    09-11 09:09