SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法
SpringBoot使用定時(shí)器使用方法添加@Scheduled注解 設(shè)計(jì)cron參數(shù)即可
package com.clsystem.Comm; import org.springframework.scheduling.annotation.Scheduled; /** * Created by pudding on 2017-11-10.(打卡記錄定時(shí)任務(wù)) */ @Component public class ClockTiming { /** * 定時(shí)器 */ @Scheduled(cron="0 0 0 * * ?")//每天0點(diǎn)開始 public void insertClock(){ //業(yè)務(wù)邏輯 } }
動(dòng)態(tài)定時(shí)器的實(shí)現(xiàn)也非常簡(jiǎn)單繼承SchedulingConfigurer 類實(shí)現(xiàn)方法即可
package com.clsystem.Comm; import com.clsystem.Util.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import java.util.Calendar; import java.util.Date; /** * Created by pudding on 2017-11-15.(動(dòng)態(tài)定時(shí)器 用于打卡前10分鐘推送消息)(!鬧鐘) */ @Component public class DynamicScheduledTask implements SchedulingConfigurer { @Autowired private CheckSystemMapper checkSystemMapper; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(new Runnable() { @Override public void run() { // 定時(shí)任務(wù)的業(yè)務(wù)邏輯 System.out.println("提醒打卡"); } }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) {//設(shè)置下次定時(shí)器 Integer day= DateUtil.getDay();//獲取今天周幾 day+=1;//得到明天周幾 if (day==8){//排除周日 day=1; } String MornTime=checkSystemMapper.getCheckSystem(day).getBeforeMornTime();//獲取明天上班時(shí)間 int j = MornTime.indexOf(":"); Integer BeforeMornTimeHour=Integer.parseInt(MornTime.substring(0,j));//取早上上班時(shí) Integer BeforeMornTimeMinute=Integer.parseInt(MornTime.substring(j+1,MornTime.length()));//取早上上班分 Date date=new Date(); date.setHours(BeforeMornTimeHour); date.setMinutes(BeforeMornTimeMinute); date.setSeconds(0); Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.MINUTE,-10);//減去10分鐘 int hour=cal.get(Calendar.HOUR_OF_DAY);//24小時(shí)制 int minute=cal.get(Calendar.MINUTE);//分 String cron="0 "+minute+" "+hour+" * * "+day+""; System.out.println(cron); CronTrigger trigger = new CronTrigger(cron); // 定時(shí)任務(wù)觸發(fā),可修改定時(shí)任務(wù)的執(zhí)行周期 Date nextExecDate = trigger.nextExecutionTime(triggerContext); return nextExecDate; } }); } }
cron參數(shù)基本用法:
●星號(hào)():可用在所有字段中,表示對(duì)應(yīng)時(shí)間域的每一個(gè)時(shí)刻,例如,在分鐘字段時(shí),表示“每分鐘”;
●問號(hào)(?):該字符只在日期和星期字段中使用,它通常指定為“無意義的值”,相當(dāng)于點(diǎn)位符;
●減號(hào)(-):表達(dá)一個(gè)范圍,如在小時(shí)字段中使用“10-12”,則表示從10到12點(diǎn),即10,11,12;
●逗號(hào)(,):表達(dá)一個(gè)列表值,如在星期字段中使用“MON,WED,FRI”,則表示星期一,星期三和星期五;
●斜杠(/):x/y表達(dá)一個(gè)等步長(zhǎng)序列,x為起始值,y為增量步長(zhǎng)值。如在分鐘字段中使用0/15,則表示為0,15,30和45秒,而5/15在分鐘字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;
●L:該字符只在日期和星期字段中使用,代表“Last”的意思,但它在兩個(gè)字段中意思不同。L在日期字段中,表示這個(gè)月份的最后一天,如一月的31號(hào),非閏年二月的28號(hào);如果L用在星期中,則表示星期六,等同于7。但是,如果L出現(xiàn)在星期字段里,而且在前面有一個(gè)數(shù)值X,則表示“這個(gè)月的最后X天”,例如,6L表示該月的最后星期五;
●W:該字符只能出現(xiàn)在日期字段里,是對(duì)前導(dǎo)日期的修飾,表示離該日期最近的工作日。例如15W表示離該月15號(hào)最近的工作日,如果該月15號(hào)是星期六,則匹配14號(hào)星期五;如果15日是星期日,則匹配16號(hào)星期一;如果15號(hào)是星期二,那結(jié)果就是15號(hào)星期二。但必須注意關(guān)聯(lián)的匹配日期不能夠跨月,如你指定1W,如果1號(hào)是星期六,結(jié)果匹配的是3號(hào)星期一,而非上個(gè)月最后的那天。W字符串只能指定單一日期,而不能指定日期范圍;
●LW組合:在日期字段可以組合使用LW,它的意思是當(dāng)月的最后一個(gè)工作日;
●井號(hào)(#):該字符只能在星期字段中使用,表示當(dāng)月某個(gè)工作日。如6#3表示當(dāng)月的第三個(gè)星期五(6表示星期五,#3表示當(dāng)前的第三個(gè)),而4#5表示當(dāng)月的第五個(gè)星期三,假設(shè)當(dāng)月沒有第五個(gè)星期三,忽略不觸發(fā);
● C:該字符只在日期和星期字段中使用,代表“Calendar”的意思。它的意思是計(jì)劃所關(guān)聯(lián)的日期,如果日期沒有被關(guān)聯(lián),則相當(dāng)于日歷中所有日期。例如5C在日期字段中就相當(dāng)于日歷5日以后的第一天。1C在星期字段中相當(dāng)于星期日后的第一天。
Cron表達(dá)式對(duì)特殊字符的大小寫不敏感,對(duì)代表星期的縮寫英文大小寫也不敏感。
表2下面給出一些完整的Cron表示式的實(shí)例:
CRON表達(dá)式 含義
“0 0 12 * * ?” 每天中午十二點(diǎn)觸發(fā)
“0 15 10 ? * *” 每天早上10:15觸發(fā)
“0 15 10 * * ?” 每天早上10:15觸發(fā)
“0 15 10 * * ? *” 每天早上10:15觸發(fā)
“0 15 10 * * ? 2005” 2005年的每天早上10:15觸發(fā)
“0 * 14 * * ?” 每天從下午2點(diǎn)開始到2點(diǎn)59分每分鐘一次觸發(fā)
“0 0/5 14 * * ?” 每天從下午2點(diǎn)開始到2:55分結(jié)束每5分鐘一次觸發(fā)
“0 0/5 14,18 * * ?” 每天的下午2點(diǎn)至2:55和6點(diǎn)至6點(diǎn)55分兩個(gè)時(shí)間段內(nèi)每5分鐘一次觸發(fā)
“0 0-5 14 * * ?” 每天14:00至14:05每分鐘一次觸發(fā)
“0 10,44 14 ? 3 WED” 三月的每周三的14:10和14:44觸發(fā)
“0 15 10 ? * MON-FRI” 每個(gè)周一、周二、周三、周四、周五的10:15觸發(fā)
總結(jié)
以上所述是小編給大家介紹的SpringBoot 動(dòng)態(tài)定時(shí)器的使用方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- SpringBoot+@EnableScheduling使用定時(shí)器的常見案例
- SpringBoot簡(jiǎn)單實(shí)現(xiàn)定時(shí)器過程
- Springboot webscoket自定義定時(shí)器
- springboot使用定時(shí)器@Scheduled不管用的解決
- 使用springboot時(shí),解決@Scheduled定時(shí)器遇到的問題
- SpringBoot開發(fā)實(shí)戰(zhàn)系列之定時(shí)器
- Springboot集成定時(shí)器和多線程異步處理操作
- SpringBoot集成ElaticJob定時(shí)器的實(shí)現(xiàn)代碼
- SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn)示例
相關(guān)文章
Java 動(dòng)態(tài)代理你真的懂了嗎(動(dòng)態(tài)和代理)
動(dòng)態(tài)代理分兩部分,動(dòng)態(tài)和代理,今天通過本文給大家普及代碼模式及動(dòng)態(tài)代理的概念及示例代碼,感興趣的朋友跟隨小編一起看看吧2021-07-07Java 仿天貓服裝商城系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)仿天貓服裝商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11SpringBoot實(shí)戰(zhàn):Spring如何找到對(duì)應(yīng)轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)
這篇文章主要介紹了SpringBoot實(shí)戰(zhàn)中Spring是如何找到對(duì)應(yīng)轉(zhuǎn)換器優(yōu)雅的使用枚舉參數(shù),文中附有詳細(xì)的實(shí)例代碼有需要的朋友可以參考下,希望可以有所幫助2021-08-08SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程介紹
這篇文章主要介紹了SpringBoot?thymeleaf實(shí)現(xiàn)餅狀圖與柱形圖流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12Java代碼中與Lua相互調(diào)用實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Java代碼中與Lua相互調(diào)用實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web服務(wù)器實(shí)例解析
這篇文章主要介紹了java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Web服務(wù)器實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02