2017-02-14 289 views
0

我想使用cron表达式使用@schedule注释来安排多个任务。我有三个工作需要在固定的时间执行。例如,Job-1每天下午11点安排一次,Job-2安排在每天上午7点到下午9点,间隔1小时,Job-3每1小时安排一次。所有3个时间表任务都是同一个应用程序的一部分。如何使用Springboot通过cron表达式来安排多个任务?

我已经尝试过,但所有三个调度没有发生。我的应用程序是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

“我试过了,但所有三种调度都没有发生”。您必须在问题中包含您尝试过的内容,以便其他人为您提供帮助。 –

+0

@RamanujanR我用我的方法编辑了我的查询......你可以看看这个 – Saurabh

回答

3

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

@Configuration 
@EnableAsync 
@EnableScheduling 
public class SpringBootConfiguration { 

    @Bean 
    public Executor getTaskExecutor() { 
     return Executors.newScheduledThreadPool(10); 
    } 
} 
+0

你可以请解释一下,因为我编辑了我的查询。我想知道,我是否需要明确调用每个线程的每个任务,或者Springboot会处理这个问题 – Saurabh

+0

请包括@AaricChen建议的代码。无需调用每个任务。春天将完成剩下的工作。同时检查'@ Scheduled'方法是否在包扫描下。还有两种方法使用'@ Schedule';是一个错字?尝试所有这些,并评论结果。我还没有尝试过Spring Boot,所以无法评论使用'$'从属性文件中获取。最好先硬编码。 –

+0

@RamanujanR日程安排是错字...感谢您的更新 – Saurabh

相关问题