spring3.0以後自主開發的定時任務工具,spring-task,可以將它比作乙個輕量級的
quartz,而且使用起來很簡單,除spring相關的包外不需要額外的包,而且支援註解和
配置檔案兩種形式。
>
/spring‐task.xsd
>
xmlns:task=""
>
<
task:annotation‐driven
>
task:annotation‐driven
>
寫測試**
@component
public
class
ordertask
}//執行,就可以看到每秒在控制台輸出.........
cron表示式是乙個字串,字串以5或6個空格隔開,分開工6或7個域,每乙個域代表
乙個含義,cron有如下兩種語法
格式:
seconds minutes hours dayofmonth month dayofweek year 或
seconds minutes hours dayofmonth month dayofweek
注意:springtask不支援第一種格式,也就是說只能寫6個域!
每乙個域可出現的字元如下:
**
seconds: 可出現,- * / 四個字元,有效範圍為0-59的整數
minutes: 可出現,- * / 四個字元,有效範圍為0-59的整數
hours: 可出現,- * / 四個字元,有效範圍為0-23的整數
dayofmonth:可出現,- * / ? l w c八個字元,有效範圍為1-31的整數
month: 可出現,- * / 四個字元,有效範圍為1-12的整數或jan-dec
dayofweek: 可出現,- * / ? l c #四個字元,有效範圍為1-7的整數或sun-sat兩個範圍。
1表示星期天,2表示星期一, 依次類推
year: 可出現,- * / 四個字元,有效範圍為1970-2023年
每乙個域都使用數字,但還可以出現如下特殊字元,它們的含義是:
(1) *:表示匹配該域的任意值,假如在minutes域使用*,即表示每分鐘都會觸發事件。
(2) ?: 只能用在dayofmonth和dayofweek兩個域。它也匹配域的任意值,但實際不會。
因為dayofmonth和dayofweek會相互影響。
例如想在每月的20日觸發排程,不管20日到底是星期幾,則只能使用如下寫法: 13 13
15 20 * ?,其中最後一位只能用?,而不能使用*,
如果使用*表示不管星期幾都會觸發,實際上並不是這樣。
(3)-:表示範圍,例如在minutes域使用5-20,表示從5分到20分鐘每分鐘觸發一次
(4)/:表示起始時間開始觸發,然後每隔固定時間觸發一次,例如在minutes域使用5/20,
則意味著5分鐘觸發一次,而25,45等分別觸發一次.
(5),:表示列出列舉值值。例如:在minutes域使用5,20,則意味著在5和20分每分鐘觸發
一次。(6)l:表示最後,只能出現在dayofweek和dayofmonth域,如果在dayofweek域使用5l,
意味著在最後的乙個星期四觸發。
(7)w:表示有效工作日(周一到周五),只能出現在dayofmonth域,系統將在離指定日期的
最近的有效工作日觸發事件。
例如:在dayofmonth使用5w,如果5日是星期六,則將在最近的工作日:星期五,即4
日觸發。如果5日是星期天,則在6日觸發;
如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,w的最近尋找不會跨
過月份(8)lw:這兩個字元可以連用,表示在某個月最後乙個工作日,即最後乙個星期五。
(9)#:用於確定每個月第幾個星期幾,只能出現在dayofmonth域。例如在4#2,表示某月
的第二個星期三。
解決方案 分布式定時任務解決方案
服務有定時任務,當服務部署到多個節點時,每個節點在同乙個時間點都會執行相同的定時任務,需要做的是,讓同乙個時間點,每乙個定時任務只在乙個節點上執行。3.1 方案一 單獨設定任務排程服務 任務排程服務部署在單結點,定時任務以http請求的方式去向閘道器呼叫任務請求,閘道器將請求分發到集群中的某乙個節點...
spring 定時任務執行兩次 解決方案
最近用spring的quartz定時器的時候,發現到時間後,任務總是重複執行兩次,試了很多方法,最後終於被我給解決了。現在將我的解決方法,和大家分享一下,期待和我一樣的菜鳥們遇到同樣的問題時,能快速的解決掉。我的解決方法是 2 修改tomcat的server.xml檔案,為節點下的docbase x...
定時任務 定時任務弊端與優化方案
使用定時任務關閉超期未支付訂單,會存在的弊端 1.會有時間差,程式不嚴謹 10 39下單,11 00檢查不足1小時,12 00檢查,超過1小時多餘39分鐘 2.不支援集群 單機沒毛病,使用集群後,就會有多個定時任務 解決方案 只使用一台計算機節點,單獨用來執行所有的定時任務 3.會對資料庫全表搜尋,...