web定時器實現方式一 spring quartz

2021-07-29 18:19:02 字數 2457 閱讀 5543

最近專案需某些任務自動執行,於是著手實現定時器。

專案環境 :spring

任務呼叫物件和呼叫物件的方法

org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean

任務觸發時間 

org.springframework.scheduling.quartz.crontrigge***ctorybean

總管理類

org.springframework.scheduling.quartz.schedule***ctorybean

在spring中的配置如下:

<?xml version="1.0" encoding="utf-8"?>

dotaskorder

$

時間配置檔案如下:

quartz-task.properties

#每天凌晨1點整

#0 0 1 * * ?

#每天凌晨0點30分

#0 30 0 * * ?

#1小時處理一次

#0 */60 * * * ?

#5秒處理一次

#*/5 * * * * ?

timer.task.time=0 0 1 * * ?

其中表示式 : 0 0 1 * * ? 為cron表示式

總共7個站位符,從左往右依次是秒,分,小時,月內日期,月,週內日期,年(參考字段)

以下為參考資料

特殊字元

cron 觸發器利用一系列特殊字元,如下所示:

反斜線(/)字元表示增量值。例如,在秒字段中「5/15」代表從第 5 秒開始,每 15 秒一次。

問號(?)字元和字母 l 字元只有在月內日期和週內日期欄位中可用。問號表示這個欄位不包含具體值。所以,如果指定月內日期,可以在週內日期欄位中插入「?」,表示週內日期值無關緊要。字母 l 字元是 last 的縮寫。放在月內日期欄位中,表示安排在當月最後一天執行。在週內日期欄位中,如果「l」單獨存在,就等於「7」,否則代表當月內週內日期的最後乙個例項。所以「0l」表示安排在當月的最後乙個星期日執行。

在月內日期欄位中的字母(w)字元把執行安排在最靠近指定值的工作日。把「1w」放在月內日期欄位中,表示把執行安排在當月的第乙個工作日內。

井號(#)字元為給定月份指定具體的工作日例項。把「mon#2」放在週內日期欄位中,表示把任務安排在當月的第二個星期一。

星號(*)字元是通配字元,表示該欄位可以接受任何可能的值。

字段 允許值 允許的特殊字元 

秒 0-59 , - * / 

分 0-59 , - * / 

小時 0-23 , - * / 

日期 1-31 , - * ? / l w c 

月份 1-12 或者 jan-dec , - * / 

星期 1-7 或者 sun-sat , - * ? / l c # 

年(可選) 留空, 1970-2099 , - * / 表示式意義 

"0 0 12 * * ?" 每天中午12點觸發 

"0 15 10 ? * *" 每天上午10:15觸發 

"0 15 10 * * ?" 每天上午10:15觸發 

"0 15 10 * * ? *" 每天上午10:15觸發 

"0 15 10 * * ? 2005" 2023年的每天上午10:15觸發 

"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發 

"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發 

"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發 

"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發 

"0 10,44 14 ? 3 wed" 每年三月的星期三的下午2:10和2:44觸發 

"0 15 10 ? * mon-fri" 周一至周五的上午10:15觸發 

"0 15 10 15 * ?" 每月15日上午10:15觸發 

"0 15 10 l * ?" 每月最後一日的上午10:15觸發 

"0 15 10 ? * 6l" 每月的最後乙個星期五上午10:15觸發 

"0 15 10 ? * 6l 2002-2005" 2023年至2023年的每月的最後乙個星期五上午10:15觸發 

"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發 

每天早上6點 

0 6 * * * 

每兩個小時 

0 */2 * * * 

晚上11點到早上8點之間每兩個小時,早上八點 

0 23-7/2,8 * * * 

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 

0 11 4 * 1-3 

1月1日早上4點 

0 4 1 1 *

c 定時器實現

1.setitimer方法 nginx 實現,在這段 中,定義了itimerval的資料結構,並設定這個資料結構的值,從而定時器的間隔時間,settimer的函式第乙個引數表示經過timer就會觸發sigalarm事件,然後註冊了訊號sigalarm的事件,從而觸發定時器 signal sigalr...

簡單定時器實現

經常會遇到這樣的功能,需要開闢乙個執行緒同時迴圈的跑乙個任務,下面是簡單實現的 呼叫select 加超時時間 include include include include include void thread client timeout const void arg printf time o...

golang定時器實現

golang定時器,需求是能夠在指定時間後停止。或某種條件出發停止。好,下面上貨。package main import context fmt sync time func main func stoptheworld func goclock for func goclock2 執行結果 123...