在JavaEE系統中,我們會經常用到定時任務,比如每天凌晨生成前天報表,每一小時生成匯總數據等等,定時更新某某操作……。
我們可以使用java.util.Timer結合java.util.TimerTask來完成這項工作,但是調度控制非常不方便,並且我們需要大量的代碼。
使用Quartz框架無疑是非常好的選擇,並且與Spring可以非常方便的集成,下面介紹它們集成方法和Cron表達式的詳細介紹。
基於XML的方式實現Spring Quartz 雖然配置起來特別的方便,但是Spring還支持基本注解的方式來配置;
參考:關於Spring 任務調度之task:scheduler與task:executor配置的詳解
1、引入相應的Jar包;
2、 Spring配置文件:spring-timer.xml。;
在配置文件頭部加入定時器的命名空間,xmlns 多加下面的內容
在xsi:schemaLocation多加下面的內容
自動配置掃描spring配置文件里面配置內容
任務調度器的配置詳細參數說明:
task:scheduler/@pool-size:調度線程池的大小,調度線程在被調度任務完成前不會空閑
task:scheduled/@cron:cron表達式,注意,若上次任務未完成,即使到了下一次調度時間,任務也不會重復調度
任務執行器配置詳細參數說明:
task:executor/@pool-size:可以指定執行線程池的初始大小、最大大小
task:executor/@queue-capacity:等待執行的任務隊列的容量
task:executor/@rejection-policy:當等待隊列爆了時的策略,分為丟棄、由任務執行器直接運行等方式
Demo演示:(注解版) @Service 或者@Component
![]()
|
Cron表達式的格式:秒 分 時 日 月 周 年(可選)。
常用:
@Scheduled(cron = "0/1 * * * * ? ") // 每隔1秒隔行一次
@Scheduled(cron = "0 */1 * * * ?") // 每隔1分隔行一次
@Scheduled(cron = "0 0 */30 * * ?")
字段名 允許的值 允許的特殊字符
秒 0-59 , – * /
分 0-59 , – * /
小時 0-23 , – * /
日 1-31 , – * ? / L W C
月 1-12 or JAN-DEC , – * /
周幾 1-7 or SUN-SAT , – * ? / L C # MON FRI
年 (可選字段) empty, 1970-2099 , – * /
“*” : 字符可以用於所有字段,在“分”字段中設為"*"表示"每一分鍾"的含義。
“?”字符:表示不確定的值
“,”字符:指定數個值
“-”字符:指定一個值的范圍
“/”字符:指定一個值的增加幅度。n/m表示從n開始,每次增加m
“L”字符:用在日表示一個月中的最后一天,用在周表示該月最后 一個星期X
“W”字符:指定離給定日期最近的工作日(周一到周五)
“#”字符:表示該月第幾個周X。6#3表示該月第3個周五
Quartz專欄系列
3.Quartz學習——Spring和Quartz集成詳解(三)
4.Quartz學習——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成詳解(四)
5.Quartz源碼——JobStore保存JonDetail和Trigger源碼分析(一)
6.Quartz源碼——scheduler.start()啟動源碼分析(二)
7.Quartz源碼——QuartzSchedulerThread.run() 源碼分析(三)
8.Quartz源碼——Quartz調度器的Misfire處理規則(四)