当前位置: 首页 > 知识库问答 >
问题:

如何使用Springboot通过cron表达式调度多个任务?

龚鸿雪
2023-03-14

我想调度多个任务使用@调度注释使用cron表达式。我有三项工作需要在固定时间执行。例如,作业-1被安排在每天晚上11点,作业-2被安排在每天早上7点到晚上9点,间隔1小时,作业-3被安排在每1小时。所有3个计划任务都是同一应用程序的一部分。

我也尝试过同样的方法,但所有三个调度都没有发生。我的应用程序是SpringBoot应用程序。我不是新的调度。请帮帮我。下面是他我的方法

application.properties

cron.expression.job1=0 0 23 * * ?
cron.expression.job2=0 0 7,9 * * ?
cron.expression.job3=0 0/60 * * ?

Java代码

 @EnableScheduling
 @SpringBootApplication
 public class Scheduler{
     // doCallScheduleJob Code
 }

class ScheduleJob{

  @Scheduled(cron="${cron.expression.job1}")
  public sycName1(){
           ///doSomething()     
  }

  @Scheduled(cron="${cron.expression.job2}")
  public sycName2(){
           ///doSomething()     
  }

  @Scheduled(cron="${cron.expression.job3}")
  public sycName3(){
           ///doSomething()     
  }

共有1个答案

莫英卓
2023-03-14

你应该配置你的TaskScheduler线程池大小。如果你没有配置,默认的大小是1,这意味着Spring将一个接一个地执行你的任务。您可以在下面配置您的TaskScheduler。

@Configuration
@EnableAsync
@EnableScheduling
public class SpringBootConfiguration {

    @Bean
    public Executor getTaskExecutor() {
        return Executors.newScheduledThreadPool(10);
    }
}
 类似资料:
  • 是否有任何专家在使用spingdge调度程序时遇到问题? 我试着设置它在工作日的下午2点到晚上10点之间每小时运行15分钟,但是好像是按分钟触发的,这是因为我的cron出错了还是我应该做smthg来控制它? 通过springboot-web-started在linux服务器上运行 版本

  • 通过实现ApplicationListener并重写方法:onApplicationEvent(ContextRefreshedEvent事件),我编写了一个StartupListener。 在这个方法中,我试图根据文件对应的布尔值是否为true来创建一些文件。 使用@Value注释从“application.properties”文件中读取此布尔值。 这个StartupListener很好用。

  • 我想基于cron表达式运行一个作业,但它应该在rest调用后从DB中查找cron表达式。 一旦rest api被命中,它应该等待cron表达式,我们可以从数据库或任何方法获得它,然后它应该在指定的时间启动。 它的工作方式与普通的方法调用类似。

  • 我正在使用石英调度程序来安排我的工作。我有一个错误的cron表达式: 当我这样做的时候: is。但是当我查看表达式时,它显然是错误的。其他人也面临类似的问题吗? 注:包装为:包装组织。石英 石英的版本是:2.2.3 请检查来自的CronExpression类http://www.javadoc.io/doc/org.quartz-scheduler/quartz/2.2.3 我还尝试了类的方法,但