2012-01-04 76 views
1

我有Spring 3.0应用程序,它连接到WebService。 web服务请求被限制为每秒1次,并且我需要在每个请求之间以1秒的时间间隔启动约1000次请求。 我正在尝试使用Spring TaskExecutor并且我找到了示例here弹簧多任务延迟执行

但是,如何设置每个taskExecutor.execute调用之间的1秒延迟?

从例子的代码我使用:

import org.springframework.core.task.TaskExecutor; 

    public class TaskExecutorExample { 

     private class MessagePrinterTask implements Runnable { 

     private String message; 

     public MessagePrinterTask(String message) { 
      this.message = message; 
     } 

     public void run() { 
      System.out.println(message); 
     } 

     } 

     private TaskExecutor taskExecutor; 

     public TaskExecutorExample(TaskExecutor taskExecutor) { 
     this.taskExecutor = taskExecutor; 
     } 

     public void printMessages() { 
     for(int i = 0; i < 25; i++) { 
      taskExecutor.execute(new MessagePrinterTask("Message" + i)); 
     } 
     } 
    } 

回答

0

其所谓FIXEDDELAY或固定利率,取决于whant正是你需要

<task:scheduled-tasks scheduler="myScheduler"> 
    <task:scheduled ref="someObject" method="someMethod" fixed-delay="1000"/> 
    <task:scheduled ref="someObject" method="someOtherMethod" fixed-rate="1000"/> 
</task:scheduled-tasks> 

@Scheduled(fixedDelay=1000) 

@Scheduled(fixedRate=1000) 

它在Spring参考,在这里你都取自

0

TaskExecutor的例子有据可查的是不使用这个正确的接口,它用于发射后不管“执行这个只要你能”操作。您应该使用TaskScheduler。这提供了诸如scheduleAtFixedDelayscheduleAtFixedRate的方法。

查看javadoc来阅读这些方法的描述 - 小心,它很微妙。

+0

@Ralph 但这两种方法立即(或延迟后)触发操作,然后在延迟/周期后重复操作。所以在这个简单的例子中,它会写入:“Message0”,“Message1 ...”,然后等待1秒钟。 我想写:“Message0”,等待1秒,然后写“Message1”。不重复,每次操作之间有延迟。 – 2012-01-04 14:24:43