SpringBoot整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的流程
半藏商城中會(huì)有一些用戶提交了訂單但是一直沒有支付的情況,之前我是通過quartz定時(shí)任務(wù)每天的5點(diǎn)掃描未支付訂單然后讀取用戶的郵箱地址發(fā)送郵件提醒用戶盡快支付。這次我是采用Spring中自帶的SpringTask來進(jìn)行定時(shí)任務(wù)。
Cron表達(dá)式
Cron表達(dá)式是一個(gè)字符串,包括6~7個(gè)時(shí)間元素,在SpringTask中可以用于指定任務(wù)的執(zhí)行時(shí)間。
Cron的語法格式
Seconds Minutes Hours DayofMonth Month DayofWeek
Cron格式中每個(gè)時(shí)間元素的說明
時(shí)間元素 可出現(xiàn)的字符 有效數(shù)值范圍 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分各觸發(fā)一次
- 表示觸發(fā)范圍 在Minutes域使用5-10,表示從5分到10分鐘每分鐘觸發(fā)一次
* 匹配任意值 在Minutes域使用*, 表示每分鐘都會(huì)觸發(fā)一次
/ 起始時(shí)間開始觸發(fā),每隔固定時(shí)間觸發(fā)一次 在Minutes域使用5/10,表示5分時(shí)觸發(fā)一次,每10分鐘再觸發(fā)一次
? 在DayofMonth和DayofWeek中,用于匹配任意值 在DayofMonth域使用?,表示每天都觸發(fā)一次
# 在DayofMonth中,確定第幾個(gè)星期幾 1#3表示第三個(gè)星期日
L 表示最后 在DayofWeek中使用5L,表示在最后一個(gè)星期四觸發(fā)
W 表示有效工作日(周一到周五) 在DayofMonth使用5W,如果5日是星期六,則將在最近的工作日4日觸發(fā)一次
整合SpringTask
由于SpringTask已經(jīng)存在于Spring框架中,所以無需添加依賴。
配置SpringTaskConfig類
只需要在配置類中添加一個(gè)@EnableScheduling注解即可開啟SpringTask的定時(shí)任務(wù)能力。
@Configuration @EnableScheduling public class SpringTaskConfig { }
添加CallPaySpringTask類來執(zhí)行定時(shí)任務(wù)
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 2469653218@qq.com * @Date 2020/5/19 23:33 * @link https://github.com/Tianhaoy/hanzomall * @Description: 每天定時(shí)掃描訂單 未支付狀態(tài)的單子發(fā)送郵件提醒支付 */ @Slf4j @Component public class CallPaySpringTask { @Resource private TaskService taskService; /** * cron表達(dá)式:Seconds Minutes Hours DayOfMonth Month DayOfWeek [Year] */ @Scheduled(cron = "0 0 5 * * ?") private void callPay() { log.info("通過SpringTask開始批量發(fā)送待支付訂單郵件提醒"); //這里調(diào)用自己的定時(shí)任務(wù)接口--我這里調(diào)用的是發(fā)送待支付訂單郵件的接口 taskService.callPayOrders(); } }
還有一些查找訂單信息的service層 mapper層代碼就不貼出了,根據(jù)自己的業(yè)務(wù)進(jìn)行開發(fā)就可以。主要是分享流程,代碼實(shí)現(xiàn)并不難。
小結(jié)
到此為止,整個(gè)通過SpringTask定時(shí)任務(wù)發(fā)送郵件信息的流程就介紹完畢了,知識(shí)只有分享出來才有價(jià)值。如果有問題的話,可以在關(guān)于我的頁面,通過我的郵箱聯(lián)系我進(jìn)行探討。
相關(guān)文章
在java中實(shí)現(xiàn)C#語法里的按引用傳遞參數(shù)的方法
下面小編就為大家?guī)硪黄趈ava中實(shí)現(xiàn)C#語法里的按引用傳遞參數(shù)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API
作為后端程序員,我們的日常工作就是調(diào)用一些第三方服務(wù),將數(shù)據(jù)存入數(shù)據(jù)庫,返回信息給前端。本文為大家介紹了如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API,需要的可以參考一下2022-12-12詳解Idea 2019.2 安裝lombok插件失效問題解決
這篇文章主要介紹了詳解Idea 2019.2 安裝lombok插件失效問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Spring主配置文件(applicationContext.xml) 導(dǎo)入約束詳解
在本篇文章里我們給各位整理的是關(guān)于Spring主配置文件(applicationContext.xml) 導(dǎo)入約束的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要參考下。2019-08-08Ehcache簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Ehcache簡介,使用Spring的AOP進(jìn)行整合,可以靈活的對(duì)方法的返回結(jié)果對(duì)象進(jìn)行緩存2017-07-07Java Json字符串的雙引號(hào)("")括號(hào)如何去掉
這篇文章主要介紹了Java Json字符串的雙引號(hào)("")括號(hào)如何去掉?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09微服務(wù)之間如何通過feign調(diào)用接口上傳文件
這篇文章主要介紹了微服務(wù)之間如何通過feign調(diào)用接口上傳文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06