2017-02-14 12 views
0

@スケジュール注釈を使用して複数のタスクをスケジュールしたいと思います。私は一定の時間に実行する必要がある3つの仕事があります。たとえば、Job-1は毎日11時にスケジュールされ、Job-2は1時間ごとに午前7時から午後9時まで、Job-3は1時間ごとにスケジュールされています。 3つのスケジュールタスクはすべて同じアプリケーションの一部です。Springbootを使って複数のタスクをcron式でスケジューリングする方法は?

私は同じことを試みましたが、3つのスケジューリングはすべて起こっていません。私のアプリケーションはです。SpringBootアプリケーション。私は新しいスケジューリングではありません。よろしくお願いします。以下は、彼はあなたがあなたのTaskSchedulerスレッドプールのサイズを設定する必要があり

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

「私は同じことを試みましたが、3つのスケジューリングはすべて発生していません」。試したことを他の人が助けるために質問に含める必要があります。 –

+0

@RamanujanR私のアプローチで私のクエリを編集しました...あなたはこれを調べてください。 – Saurabh

答えて

3

私のアプローチです。あなたが設定していない場合、デフォルトのサイズは1です。これは平均的なスプリングがあなたのタスクを1つずつ実行します。以下でTaskSchedulerを設定することができます。

@Configuration 
@EnableAsync 
@EnableScheduling 
public class SpringBootConfiguration { 

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

私はクエリを編集したので、もう少し説明してください。私は知りたかったのですが、スレッドごとに明示的に各スレッドを呼び出す必要があるのか​​、Springbootがこれを処理するのかは、 – Saurabh

+0

@AaricChenとして提案してください。各タスクを呼び出す必要はありません。春は残りをする。また、 '@ Scheduled'メソッドがパッケージスキャンの下にあることを確認してください。また、 '@ Schedule'を2つの方法で使用しています。それはタイプミスですか?すべてこれを試して、結果をコメントしてください。私はまだSpring Bootを試していないので、 '$'を使ってプロパティファイルから取得することについてコメントすることはできません。最初はハードコードを良くしてください。 –

+0

@RamanujanRスケジュールはtypoです...アップデートをありがとう – Saurabh

関連する問題