您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在SpringBoot中使用動(dòng)態(tài)定時(shí)器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
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ā)
springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡(jiǎn)化配置文件。
關(guān)于如何在SpringBoot中使用動(dòng)態(tài)定時(shí)器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。