springboot內嵌定時任務使用及cron表達式講解


第一步:pom引入依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

第二步:配置定時器

package com.macro.mall.tiny.component;

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

/**
* 訂單超時取消並解鎖庫存的定時器
*/
@Component
public class OrderTimeOutCancelTask {
private Logger LOGGER = LoggerFactory.getLogger(OrderTimeOutCancelTask.class);

/**
* cron表達式:Seconds Minutes Hours DayofMonth Month DayofWeek [Year]
* 每10分鍾掃描一次,掃描設定超時時間之前下的訂單,如果沒支付則取消該訂單
*/
// cron配置一般是放在配置文件中
// @Scheduled(cron = "0 0/10 * ? * ?")
@Scheduled(cron = "${job.schedule}")
private void cancelTimeOutOrder() {
LOGGER.info("取消訂單,並根據sku編號釋放鎖定庫存");
}
}

第三步:定時任務配置(可以直接在啟動類上添加注解@EnableScheduling,也可以定義配置類,以下是配置類的形式)

package com.macro.mall.tiny.config;

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

/**
 * 定時任務配置
 */
@Configuration
@EnableScheduling
public class SpringTaskConfig {
}

cron表達式講解:

 /**
     * cron 知識講解:
     * cron 每位的含義:
     *      - 第一位,表示秒,取值 0-59;
     *      - 第二位,表示分,取值 0-59;
     *      - 第三位,表示小時,取值 0-23;
     *      - 第四位,日期天/日,取值 1-31;
     *      - 第五位,日期月份,取值 1-12;
     *      - 第六位,星期,取值 1-7,星期一、星期二…;注:不是第1周、第2周的意思,另外:1表示星期天,2表示星期一。
     *      - 第七位,年份,可以留空,取值 1970-2099。
     *
     * cron 符號含義:
     *      (*)星號:可以理解為每的意思,每秒、每分、每天、每月、每年……。
     *      (?)問號:問號只能出現在日期和星期這兩個位置,表示這個位置的值不確定,每天 12 點執行,所以第六位星期的位置是不需要關注的,就是不確定的值。同時,日期和星期是兩個相互排斥的元素,通過問號來表明不指定值。
     *      (-)減號:表達一個范圍,如在小時字段中使用“10-12”,則表示從 10~12 點,即 10、11、12。
     *      (,)逗號:表達一個列表值,如在星期字段中使用“1,2,4”,則表示星期天、星期一、星期三。
     *      (/)斜杠:如 x/y,x 是開始值,y 是步長,比如在第一位(秒) 0/15 就是,從 0 秒開始,每 15 秒,最后就是 0、15、30、45、60,另 * /y,等同於 0/y。
     *
     * 例子:
     *      0 0 1 * * ?     每天 1 點執行。
     *      0 5 1 * * ?     每天 1 點 5 分執行。
     *      0-5 * * * * ?   每分鍾的0/1/2/3/4/5 秒執行
     *      0 5/10 1 * * ?  每天 1 點的 5 分、15 分、25 分、35 分、45 分、55 分這幾個時間點執行。
     *      0 5 1 ? * 1     每周星期天,1點5分 執行,注:1 表示星期天。
     *      0 10 3 ? * 1#3  每個月的第 三 個星期,星期天執行,# 號只能出現在星期的位置。
     */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM