我的调度程序具有方法:
@Scheduled(fixedDelay = 1000L)
public void sendRequest() {
client.getData(); //send request to some server
}
我每秒需要发送50个请求(致电client.getData()
)
我该怎么做?
这个例子很糟糕,但是我写它来显示我的需求:
@Scheduled(fixedDelay = 1000L)
public void sendRequest() {
for(int i=0; i<50; i++){
taskExecutor.execute(() -> client.getData()); //send request to some server
}
}
还是maby,我需要创建50个schedulers
,每个调度程序都会每秒触发一次?
答案 0 :(得分:0)
@Scheduled(fixedDelay = 1000L)
@Scheduled批注的处理是通过注册ScheduledAnnotationBeanPostProcessor来执行的。 Bean后处理器根据通过注释提供的“ fixedRate”,“ fixedDelay”或“ cron”表达式,注册使用{Schedled注释的方法,这些方法将由TaskScheduler调用。 在这里,我们有一个并发的故事。如果将ThreadPoolTaskScheduler用作TaskScheduler的实现,从字面上看,您将实现Spring的TaskScheduler接口的实现,并包装了一个本地ScheduledThreadPoolExecutor。我们逐步走到Thread s。它们确实需要CPU时间。 CPU时间与您的计算机及其配置有关。
您可以根据需要使用此注释,但实际性能取决于部署应用程序的计算机。如果机器的配置(CPU等)提供了每秒精确地处理/发送50个请求的能力-不用客气。如果您尝试在不同的计算机上以独立应用程序的形式启动50个调度程序,则也可能会解决您的问题。