我有一个spring 3.0 app,它连接到WebService。 Web服务请求限制为每秒1次,我需要触发~1000个请求,每个请求之间有1秒的延迟。 我尝试使用Spring TaskExecutor进行操作,并且我找到了示例here
但是如何在每个taskExecutor.execute调用之间设置1秒的延迟?
示例I中的代码使用:
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 :(得分:0)
它叫做fixedDelay或fixedRate,具体取决于你需要什么
<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 Reference中有详细记录,您可以从
中获取示例答案 1 :(得分:0)
TaskExecutor
不是用于此的正确接口,它用于即发即弃“随时执行此操作”操作。您应该使用TaskScheduler
代替。这提供了scheduleAtFixedDelay
和scheduleAtFixedRate
等方法。
查看javadoc以阅读这些方法的说明 - 小心,它非常微妙。