国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

spring定時(shí)任務(wù)詳解(@Scheduled注解)

2019-11-08 20:12:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原文鏈接:http://blog.csdn.net/QQ_33556185/article/details/51852537

配置定時(shí)任務(wù)的步驟

在sPRingMVC里使用spring的定時(shí)任務(wù)非常的簡(jiǎn)單,如下: (一)在xml里加入task的命名空間

xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd

(二)啟用注解驅(qū)動(dòng)的定時(shí)任務(wù)

<task:annotation-driven scheduler="myScheduler"/>

(三)配置定時(shí)任務(wù)的線程池 推薦配置線程池,若不配置多任務(wù)下會(huì)有問題。后面會(huì)詳細(xì)說(shuō)明單線程的問題。

<task:scheduler id="myScheduler" pool-size="5"/>

(四)寫我們的定時(shí)任務(wù) @Scheduled注解為定時(shí)任務(wù),cron表達(dá)式里寫執(zhí)行的時(shí)機(jī)

package com.mvc.task.impl; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.concurrent.TimeUnit; import org.joda.time.DateTime; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.mvc.task.IATask; @Component public class ATask implements IATask{ @Scheduled(cron="0/10 * * * * ? ") //每10秒執(zhí)行一次 @Override public void aTask(){ try { TimeUnit.SECONDS.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(DateTime.now().toDate())+"*********A任務(wù)每10秒執(zhí)行一次進(jìn)入測(cè)試"); } } package com.mvc.task.impl; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.joda.time.DateTime; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.mvc.task.IBTask; @Component public class BTask implements IBTask{ @Scheduled(cron="0/5 * * * * ? ") //每5秒執(zhí)行一次 @Override public void bTask(){ DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(DateTime.now().toDate())+"*********B任務(wù)每5秒執(zhí)行一次進(jìn)入測(cè)試"); } }

spring的定時(shí)任務(wù)默認(rèn)是單線程,多個(gè)任務(wù)執(zhí)行起來(lái)時(shí)間會(huì)有問題(B任務(wù)會(huì)因?yàn)锳任務(wù)執(zhí)行起來(lái)需要20S而被延后20S執(zhí)行),如下圖所示: 這里寫圖片描述

當(dāng)我們配置了線程池后再來(lái)看結(jié)果(多線程下,B任務(wù)再也不會(huì)因?yàn)锳任務(wù)執(zhí)行起來(lái)要20S而被延后了):

這里寫圖片描述

cron表達(dá)式詳解:

一個(gè)cron表達(dá)式有至少6個(gè)(也可能7個(gè))有空格分隔的時(shí)間元素。按順序依次為:

秒(0~59)分鐘(0~59)小時(shí)(0~23)天(0~31)月(0~11)星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,F(xiàn)RI,SAT)

年份(1970-2099)

其中每個(gè)元素可以是一個(gè)值(如6),一個(gè)連續(xù)區(qū)間(9-12),一個(gè)間隔時(shí)間(8-18/4)(/表示每隔4小時(shí)),一個(gè)列表(1,3,5),通配符。由于”月份中的日期”和”星期中的日期”這兩個(gè)元素互斥的,必須要對(duì)其中一個(gè)設(shè)置?.

0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn) 0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí) 0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn) "0 0 12 * * ?" 每天中午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:59期間的每1分鐘觸發(fā) "0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā) "0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā) "0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā) "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā) "0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā) "0 15 10 15 * ?" 每月15日上午10:15觸發(fā) "0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā) "0 15 10 ? * 6L" 每月的最后一個(gè)星期五上午10:15觸發(fā) "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個(gè)星期五上午10:15觸發(fā) "0 15 10 ? * 6#3" 每月的第三個(gè)星期五上午10:15觸發(fā)

有些子表達(dá)式能包含一些范圍或列表 例如:子表達(dá)式(天(星期))可以為 “MON-FRI”,“MON,WED,F(xiàn)RI”,“MON-WED,SAT” “*”字符代表所有可能的值 “/”字符用來(lái)指定數(shù)值的增量 例如:在子表達(dá)式(分鐘)里的“0/15”表示從第0分鐘開始,每15分鐘 在子表達(dá)式(分鐘)里的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣 “?”字符僅被用于天(月)和天(星期)兩個(gè)子表達(dá)式,表示不指定值 當(dāng)2個(gè)子表達(dá)式其中之一被指定了值以后,為了避免沖突,需要將另一個(gè)子表達(dá)式的值設(shè)為“?” “L” 字符僅被用于天(月)和天(星期)兩個(gè)子表達(dá)式,它是單詞“l(fā)ast”的縮寫 如果在“L”前有具體的內(nèi)容,它就具有其他的含義了。例如:“6L”表示這個(gè)月的倒數(shù)第6天 注意:在使用“L”參數(shù)時(shí),不要指定列表或范圍,因?yàn)檫@會(huì)導(dǎo)致問題 W 字符代表著平日(Mon-Fri),并且僅能用于日域中。它用來(lái)指定離指定日的最近的一個(gè)平日。大部分的商業(yè)處理都是基于工作周的,所以 W 字符可能是非常重要的。 例如,日域中的 15W 意味著 “離該月15號(hào)的最近一個(gè)平日。” 假如15號(hào)是星期六,那么 trigger 會(huì)在14號(hào)(星期五)觸發(fā),因?yàn)樾瞧谒谋刃瞧谝浑x15號(hào)更近。 C:代表“Calendar”的意思。它的意思是計(jì)劃所關(guān)聯(lián)的日期,如果日期沒有被關(guān)聯(lián),則相當(dāng)于日歷中所有日期。例如5C在日期字段中就相當(dāng)于日歷5日以后的第一天。1C在星期字段中相當(dāng)于星期日后的第一天。 字段 允許值 允許的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小時(shí) 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可選) 留空, 1970-2099 , - * /


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷州市| 北辰区| 潍坊市| 乌鲁木齐市| 阳信县| 三亚市| 虞城县| 高平市| 阆中市| 台湾省| 运城市| 乌拉特前旗| 若尔盖县| 介休市| 佛山市| 昌乐县| 山阴县| 镇雄县| 青阳县| 峨山| 五华县| 丹巴县| 专栏| 建瓯市| 拉萨市| 莲花县| 衢州市| 达州市| 蓝田县| 深泽县| 平顺县| 和政县| 岐山县| 桐庐县| 满洲里市| 图木舒克市| 钦州市| 迭部县| 淳化县| 潮州市| 甘洛县|