2017-02-14 284 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

相關問題