本章是系列文章的第三章,介紹了基於數據流分析的一些優化方法。包括生命周期管理,可獲得表達式,常用表達式,可達性定義。本章在介紹這4中分析方法的基礎上提取出它們的通用模式。這一章形式化的內容比較多,看的時候有點燒腦,最好自己手工推導一下,要不然基本上看不懂:) 本文中的所有內容來自學習DCC888的學 ...
Cron 表達式的介紹:
cron 的表達式是被用來配置 CronTrigger 實例的。
cron 的表達式是字元串,實際上是有七個子表達式,描述個別細節的時間表。
這些子表達式是由空格分開的,分別代表:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- Year (可選欄位)
例如 "0 0 12 ? * WED" 表示在每星期三下午 12:00 執行,個別子表達式可以包含範圍;
例如,在前面的例子里 "WED" 可以替換為 "MON-FRI","MON,WED,FRI" 甚至 "MON-WED,SAT"。"*" 代表整個時間段。
每一個欄位都有一套可以指定有效值,如
Seconds (秒):可以用數字 0-59 表示
Minutes (分):可以用數字 0-59 表示
Hours (時):可以用數字 0-23 表示
Day-of-Month (天):可以用數字 1-31 中的任意一個值,但要註意一些特別的月份
Month (月):可以用 0-11 或用字元串 "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV and DEC" 表示
Day-of-Week (每周):可以用數字 1-7 表示(1=星期日)或用字元串 “SUN,MON,TUE,WED,THU,FRI and SAT" 表示
"*":指定所有的值,比如,Minutes 設置為 *,表示每分鐘
"/":為特別單位,表示為 “每”,例如 "0/15" 表示每隔 15 分鐘執行一次,"0" 表示為從 0 分開始,"3/20" 表示每隔 20 分鐘執行一次,"3" 表示從第 3 分鐘開始執行
"?":表示每月的某一天,或每周的某一天
"L":用於每月或每周,表示為每月的最後一天,或每個月的最後一個星期幾如 "6L" 表示 “每月的最後一個星期五”
"W":表示為最近的工作日,如 "15W" 放在每月(day-of-month)欄位上表示為 “到本月 15 日最近的工作日”
"#":是用來指定每月第 n 個工作日,例如在每周(day-of-week)這個欄位中內容為 "6#3" or "FRI#3" 則表示 “每月第三個星期五”
Cron 表達式的格式:
秒 分 時 日 月 周 年 (可選)
只有日和周可以為 "?",並且日和周不能同時為 "?"、"*";否則會報無效錯誤;
欄位名 | 允許的值 | 允許的特殊字元 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小時 | 0-23 | , - * / |
日 | 1-31 | , - * ? / L W C |
月 | 1-12 or JAN-DEC | , - * / |
周幾 | 1-7 or SUN-SAT | , - * ? / L C # |
年 (可選欄位) | empty, 1970-2099 | , - * / |
java 項目 from fhadmin.cn
“?” 字元:表示不確定的值
“,” 字元:指定數個值
“-” 字元:指定一個值的範圍
“/” 字元:指定一個值的增加幅度。n/m 表示從 n 開始,每次增加 m
“L” 字元:用在日表示一個月中的最後一天,用在周表示該月最後一個星期 X
“W” 字元:指定離給定日期最近的工作日 (周一到周五)
“#” 字元:表示該月第幾個周 X。6#3 表示該月第 3 個周五
Cron 表達式的範例:
每隔 5 秒執行一次:*/5 * * * * ?
每隔 1 分鐘執行一次:0 */1 * * * ?
每天 23 點執行一次:0 0 23 * * ?
每天凌晨 1 點執行一次:0 0 1 * * ?
每月 1 號凌晨 1 點執行一次:0 0 1 1 * ?
每月最後一天 23 點執行一次:0 0 23 L * ?
每周星期天凌晨 1 點實行一次:0 0 1 ? * L
在 26 分、29 分、33 分執行一次:0 26,29,33 * * * ?
每天的 0 點、13 點、18 點、21 點都執行一次:0 0 0,13,18,21 * * ?
每天的 7 點到 21 點都執行一次:0 0 7-21 * * ?