電力供給プロジェクトの戦闘(5) - SpringTaskは定期的なタスクを達成

I.はじめに

  定期的なタスクが生活の中でどこにでも反映、例えば、朝起き、あなたは自分自身を呼び出すための目覚まし時計、定期的なタスクを使用するプログラムで、シーンを設定する必要がありますか?注文が突然すぎて感じた、賃金に、1は、支払額を見ることができたときに、賃金へのプロセスを有するように生成された後、商品の在庫がで買ってきたので、私は、ただぶら下がって、順番に賃金をキャンセルしないしないでくださいロック状態、良い少量の、それは数十まだ買って、数千人のロック、そしてこの時、未払いの注文をキャンセルするタイミングを、この問題に良い解決策がある場合。

第二に、フレームワーク

  1、春のタスク

    SpringTask春は定期的なタスクのための軽量な自己開発したツールである、追加の依存関係を導入する必要はありません

  2、クロン式

    cronの式は文字列で、その構文は次のとおりです。秒の分の時間DAYOFMONTH月DAYOFWEEK

    cronの形式の特殊文字は、次のとおりです。

 

文字

効果 例えば
、(カンマ) 列挙値は、列挙されました

分ドメイン5、10、5時間の各トリガ点及び10点を表します。

- (ダッシュ) トリガー範囲ことを示します

ドメイン分5-10では、1分に1回トリガされ、初めから10に5を表し、

*(アスタリスク) 手段は、任意の値に一致します

使用した分のドメインでは*毎分後にトリガを示しています

/(左スラッシュ)

これは、開始トリガ時刻を示します

また、各一定時間トリガ

使用中の5/10分ドメインごとに一回5分からリア開始トリガ

トリガーaに10分

(疑問符)

そしてだけDAYOFMONTHで

任意の値に一致するDAYOFWEEK

DAYOFMONTHドメインで?ショーは一日一回トリガされます
#(井号)

DAYOFMONTHでのみ使用

これは、週の最初の数日間を表し、

DAYOFMONTHドメイン、毎月第3日曜日で使用する1#3

トリガーA

L(大文字のL) それは最後を表し

DAYOFWEEKドメインの使用5L、前木曜日のショートリガーで

 

 

 

  cronの構文の要素説明

時間要素 文字が表示される場合があります

有効範囲

、 - * /

0-59

議事録

、 - * / 0-59

営業時間

、 - * / 0-59

DAYOFMONTH

、 - * /?LW 0-31

、 - * / 1-12

DAYOFWEEK

、 - * /?L番号 1-7 或 SUN-SAT

三、业务场景

  · 用户对某商品进行下单操作

  · 系统需要根据用户购买的商品信息生成订单并锁定商品的库存

  · 系统设定用户60分钟不支付,自动取消订单

  · 开启一个定时任务,每隔10分钟进行一次扫描,如果有超时未支付订单,就将订单取消并释放库存商品

四、整合SpringTask

  1、在config包下新建启动SpringTask启动类SpringTaskConfig

package com.zzb.test.admin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * 定时任务配置类
 * Created by zzb on 2019/11/26 12:17
 */
@Configuration
@EnableScheduling
public class SpringTaskConfig {
}

  2、在component包下新建SpringTask配置类OrderTimeOutCancelTask

package com.zzb.test.admin.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


/**
 * 定时任务  订单超时自动取消并释放库存商品
 * Created by zzb on 2019/11/26 11:07
 */
@Component
public class OrderTimeOutCancelTask {

    private static final Logger logger = LoggerFactory.getLogger(OrderTimeOutCancelTask.class);

    // TODO: 2019/11/26 Seconds Minutes Hours DayofMonth Month DayofWeek
    @Scheduled(cron = "0 0/10 * ? * ?")
    public void cancelTimeOutOrder(){

        // TODO: 2019/11/26 从零点开始,每隔10分钟扫描一次,查询未支付订单
        logger.info("取消订单,并释放库存商品");
    }
}

五、测试

  启动项目,等待10分钟查看日志

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/zzb-yp/p/11929925.html