我已经用fixeddelaystring=300000(5分钟)定义了3个作业,并且我已经定义了3个这些作业将独立执行。因此,我创建了一个异步实现。起初,每项工作都做得很好,但到那时,他们开始耽搁了很多时间。每次执行大约5seg,但下一次执行在10分钟后开始运行。偶尔15到18分钟。
例如:
@EnableScheduling
public class AppConfig {
@Async('threadPoolTaskExecutor')
@Scheduled(fixedDelayString=15000)
public void doSomething1() {
// something that should run periodically
}
@Async('threadPoolTaskExecutor')
@Scheduled(fixedDelayString=300000)
public void doSomething2() {
// something that should run periodically
}
@Async('threadPoolTaskExecutor')
@Scheduled(fixedDelayString=300000)
public void doSomething3() {
// this job begins to have interval larger in each execution
}
}
@Configuration
@EnableAsync
public class AsyncConf {
@Bean("threadPoolTaskExecutor")
public TaskExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(3);
executor.setMaxPoolSize(1000);
executor.setThreadNamePrefix("Async-");
return executor;
}
}
´´´
1条答案
按热度按时间x33g5p2x1#
提到固定延迟,应该是
fixedDelay
而不是fixedDelayString
. 检查以下代码:你也应该写
@EnableScheduling
配置类上的注解。还要注意的是
fixedDelay
指定一旦执行完成,作业应在指定的时间量之后运行。如果你想以固定的时间间隔运行你的工作,你应该试试fixedRate
而不是fixedDelay
. 在此处查看有关日程安排的更多信息-https://www.baeldung.com/spring-scheduled-tasks