spring引导作业使用延迟不能正常工作

krcsximq  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(387)

我已经用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;
  }
}
´´´
x33g5p2x

x33g5p2x1#

提到固定延迟,应该是 fixedDelay 而不是 fixedDelayString . 检查以下代码:

@Async('threadPoolTaskExecutor')
@Scheduled(fixedDelay = 300000)
public void doSomething3() { ... }

你也应该写 @EnableScheduling 配置类上的注解。
还要注意的是 fixedDelay 指定一旦执行完成,作业应在指定的时间量之后运行。如果你想以固定的时间间隔运行你的工作,你应该试试 fixedRate 而不是 fixedDelay . 在此处查看有关日程安排的更多信息-https://www.baeldung.com/spring-scheduled-tasks

相关问题