2012-01-04 106 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