1. 程式人生 > 程式設計 >SpringBoot整合SpringTask實現定時任務

SpringBoot整合SpringTask實現定時任務

半藏商城中會有一些使用者提交了訂單但是一直沒有支付的情況,之前我是通過quartz定時任務每天的5點掃描未支付訂單然後讀取使用者的郵箱地址傳送郵件提醒使用者儘快支付。這次我是採用Spring中自帶的SpringTask來進行定時任務。

Cron表示式

Cron表示式是一個字串,包括6~7個時間元素,在SpringTask中可以用於指定任務的執行時間。

Cron的語法格式

Seconds Minutes Hours DayofMonth Month DayofWeek

Cron格式中每個時間元素的說明

時間元素 可出現的字元  有效數值範圍
Seconds,- * /    0-59
Minutes,- * /    0-59
Hours,- * /    0-23
DayofMonth,- * / ? L W 0-31
Month,- * /    1-12
DayofWeek,- * / ? L # 1-7或SUN-SAT

Cron格式中特殊字元說明

字元作用舉例
,列出列舉值在Minutes域使用5,10,表示在5分和10分各觸發一次
-表示觸發範圍在Minutes域使用5-10,表示從5分到10分鐘每分鐘觸發一次
*匹配任意值在Minutes域使用*,表示每分鐘都會觸發一次
/起始時間開始觸發,每隔固定時間觸發一次在Minutes域使用5/10,表示5分時觸發一次,每10分鐘再觸發一次
?在DayofMonth和DayofWeek中,用於匹配任意值在DayofMonth域使用?,表示每天都觸發一次
#在DayofMonth中,確定第幾個星期幾1#3表示第三個星期日
L表示最後在DayofWeek中使用5L,表示在最後一個星期四觸發

W表示有效工作日(週一到週五)在DayofMonth使用5W,如果5日是星期六,則將在最近的工作日4日觸發一次

整合SpringTask

由於SpringTask已經存在於Spring框架中,所以無需新增依賴。

配置SpringTaskConfig類

只需要在配置類中新增一個@EnableScheduling註解即可開啟SpringTask的定時任務能力。

@Configuration
@EnableScheduling
public class SpringTaskConfig {
}

新增CallPaySpringTask類來執行定時任務

package ltd.hanzo.mall.task;

import lombok.extern.slf4j.Slf4j;
import ltd.hanzo.mall.service.TaskService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

/**
 * @Author 皓宇QAQ
 * @email [email protected]
 * @Date 2020/5/19 23:33
 * @link https://github.com/Tianhaoy/hanzomall
 * @Description: 每天定時掃描訂單 未支付狀態的單子傳送郵件提醒支付
 */
@Slf4j
@Component
public class CallPaySpringTask {

  @Resource
  private TaskService taskService;

  /**
   * cron表示式:Seconds Minutes Hours DayOfMonth Month DayOfWeek [Year]
   */
  @Scheduled(cron = "0 0 5 * * ?")
  private void callPay() {
    log.info("通過SpringTask開始批量傳送待支付訂單郵件提醒");
	//這裡呼叫自己的定時任務介面--我這裡呼叫的是傳送待支付訂單郵件的介面
    taskService.callPayOrders();
  }
}

還有一些查詢訂單資訊的service層 mapper層程式碼就不貼出了,根據自己的業務進行開發就可以。主要是分享流程,程式碼實現並不難。

小結

到此為止,整個通過SpringTask定時任務傳送郵件資訊的流程就介紹完畢了,知識只有分享出來才有價值。如果有問題的話,可以在關於我的頁面,通過我的郵箱聯絡我進行探討。