spring@scheduledタイミングタスク詳細

5341 ワード

@scheduledを使うタイミングタスクは、直接@scheduled(cron="0?**")の2つの方法があります。もう一つはxml配置を使うことです。
この2つの方法のためには、まずSpringプロファイルxmlnsに参加する必要がある。
xmlns:task="http://www.springframework.org/schema/task"
そしてxsi:schemaLocationに参加します。
  http://www.springframework.org/schema/task
     http://www.springframework.org/schema/task/spring-task-3.1.xsd"
Springスキャン注解の配置
<context:component-scan base-package="com.cym.bip" />
以下は第一の直接注釈です。
    /**
     *          , 5          
     * @param 
     * @return
     */
    @Scheduled(fixedRate = 5000)
    public void cacheUpdate(){
    List reportEventList = reportDataService.getReportCacheEvents();
    }
これは一つ目です。直接に注釈@を使って行って、もう一つはxmlの構成を使って、もちろん上のような構成も必要です。

    <task:annotation-driven/>//    xml     
    <task:scheduled-tasks scheduler="scheduler"> 
        <task:scheduled ref="ReportCacheTask" method="cacheUpdateSchedule"  cron="0 17 16 * * ?" />
    task:scheduled-tasks>

    <task:scheduler id="scheduler" pool-size="10" /> 
    //             
    <bean id="ReportCacheTask" class="com.cym.bip.report.data.cache.ReportCacheTask" />  
こちらは一つだけ必要ですので、task:scheduledに一つだけ追加しました。引き続き追加できます。例えば
 ref="ReportCacheTask" method="cacheUpdateScheduleNew" initial-delay="5000" fixed-delay="5000"/>  
具体的には、refはワーククラスのmethodです。作業クラスで実行する方法です。initial-delayは、ジョブが最初に呼び出される前の遅延時間です。単位ミリ秒fixed-delayは、前の呼び出しが完了したら再度呼び出すべき遅延fixed-rateです。いつタスクのスケジュールが行われますか?
クロン表現については次のように説明します。
一つのクロン表現は、少なくとも6つ(7つの可能性もある)のスペースで区切られた時間要素があります。順番に秒(0~59)分(0~59)時間(0~23)日(月)(0~31ですが、月の日数を考慮してください。)月(0~11)日(月)(1~7 1=SUNまたはSUN、MON、TUTE、WED、THU、FRI、SAT)年(1970-2099)となります。
各要素は、6のような値、連続区間(9-12)、間隔時間(8-18/4)、リスト(1,3,5)、ワイルドカードであることができる。「月の日付」と「週の日付」の2つの要素が互いに反発するので、どちらに設定しますか?
「0 0 10,14,16*?」毎日午前10時、午後2時、4時「0/30 9-17*?」朝9時から夜5時までの勤務時間は30分ごとに「0?12?」WEDは毎週水曜日の昼12時「0 12**?」毎日の昼12時に「0 15 10?*」を触発します。毎日午前10時15分にトリガ「0 15 10**?」毎日午前10時15分に「0 15 10***」を触発します。毎日午前10時15分にトリガします。2005年の毎日午前10時15分に「0*14*?」毎日午後2時から午後2時59分までの間に、1分間ごとに「0/5 14*?」毎日午後2時から午後2時55分の間に、5分間ごとに「0/5 14,18*?」毎日午後2時から2時55分の間と午後6時から6時55分の間に、5分間ごとに「0-5 14*?」毎日午後2時から午後2時5分の間に、1分間ごとにトリガされます。3 WEDは毎年3月の水曜日の午後2時10分と2時44分にトリガされます。MON-FRIは月曜日から金曜日までの午前10時15分に「0 15 10 15*?」をトリガします。毎月15日午前10時15分に「0 15 10 L*?」毎月最後の日の午前10時15分にトリガ「0 15 10?」6 L"は毎月最後の金曜日の午前10時15分にトリガされます。6 L 2002-2005」2002年から2005年までの毎月最後の金曜日の午前10時15分に「0 15 10?」6〓〓3は毎月の第三金曜日午前10時15分に触発されます。
一部のサブ表現は範囲またはリストを含むことができます。
例えば、サブ表現(日(日)は「MON-FRI」、「MON,WED,FRI」、「MON-WED,SAT」、「*」の文字はすべて可能な値を表します。
したがって、「」は、毎月の意味をサブ表式(月)に表し、「」は、サブ表式(日(日)では曜日の「/」の文字を表し、数値の増分を指定します。
例えば、サブ表現(分)の「0/15」は、0分目から15分ごとにサブ表現(分)の「3/20」は、3分目から20分(3,23,43)ごとに「?」と同じ意味です。文字は、日(月)と日(日)の2つのサブ表現にのみ使用され、値を指定しないことを表します。
2つのサブ表現のうちの1つに値が指定されている場合は、競合を避けるために他のサブ表現の値を「?」Lは、「last」という単語の略語です。
しかし、二つのサブ表現では意味が違っています。
日(月)のサブ表現では、「L」は一ヶ月の最後の日を表します。
日(日)の自表式では、「L」は一週間の最後の日、つまりSATを表します。
「L」の前に具体的な内容があれば、他の意味があります。
例えば、「6 L」は今月の最後から6日目を表し、「FRIL」は今月の最後の金曜日を表します。
注意:「L」パラメータを使うときは、リストや範囲を指定しないでください。これは問題になります。
フィールドで許可された値の特殊文字
秒0-59、-*/
0-59、-*/
時間0-23、-*/
日付は1-31、-*?/L W
月1-12またはJAN-DEC、*/
月曜日1-7またはSUN-AT、-*?/L.
年(オプション)を残して、1970-2099、-*/