定時任務解決方案 SpringTask

2021-10-01 01:47:14 字數 2105 閱讀 1425

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.會對資料庫全表搜尋,...