寫在前面:
前面有簡單的記錄下timer定時的用法,但是在此次專案中,選擇的是quartz來完成定時操作任務的。兩者都可以完成定時操作,但是spring可以整合quartz,並且配置起來也比較簡便,還可以同時跑多個任務。就選擇了quartz,quartz的用法也很強大,這裡也是簡單的記錄下。
第一步還是需要寫自己的任務類,如果有涉及到對資料庫的增刪改查操作,就按照正常的action,service ,dao的三層來編寫方法就好,只不過現在不是通過頁面傳送請求來呼叫action,而是通過quartz的定時來呼叫action操作。
1.編寫自己的任務類:
@controller("timertask")這裡的任務類,我是當做action來寫的,然後裡面的業務方法,根據自己的需求來即可,這裡只是簡單的列舉一下子,後面對應的service,dao的業務就不具體上**了public class timertask
/*** 每天13:30去自動開啟projectworkitemassignment表中在執行的workitem
* 以及去自動開啟workhoursrecord表中當天在執行的workitem
*/public void autostartworkitem() throws exception
/*** 每天17:30去自動暫停projectworkitemassignment表中在執行的workitem
* 以及去自動暫停workhoursrecord表中當天在執行的workitem
*/public void autopauseworkitemtwo() throws exception
}
2.編寫配置檔案,這裡我用到的是使用配置檔案的形式來配置程式執行的週期以及頻率的(可以使用**的,自己下去查閱資料),由於spring可以整合quartz,還是挺方便的。
<?xml version="1.0" encoding="utf-8"?>記得在spring的配置檔案中加入quartz的配置檔案0 0 12 * * ?
0 30 13 * * ?
0 30 17 * * ?
對於呼叫任務類有兩種方式,(使用jobdetailbean來呼叫某個類,)這裡我用的是直接執行某個類的哪乙個方法,比較方便。
其實在剛開始編寫的過程中也遇到各種問題,下面也簡單的記錄下。
當任務類是service層的類時,無法使用getcurrentsession()來獲取session,程式不報錯,直接卡在那裡。然後是可以使用opensession()來重新開啟乙個session的,但是對於增刪改,每次都需要自己手動進行session的關閉以及事務的提交,不是很方便。當時一直沒有找到問題所在,為什麼不可以使用getcurrentsession,雖然quartz是新開了乙個執行緒,但是getcurrentsession()不是獲取當前執行緒的session,如果沒有就重新開乙個麼?為什麼獲取不到呢?很是鬱悶.......後來考慮到了是不是專案配置的session的生命週期有影響,因為專案延長了session的生命週期,如下:
決定還是按照規矩來,不要把service層的類直接當任務類去呼叫,而是改用任務類為action,哇咔咔咔,竟然成功了,可以使用getcurrentsession來獲取session了,真的是折磨.....opensessioninviewfilter
org.springframework.orm.hibernate4.support.opensessioninviewfilter
所以寫**還是要多多試試,多多實踐下,然後在試的過程中一不小心就會給你大大的驚喜!!!
雖然記錄的很簡單,但是總比不記錄的要好,恩就這樣安慰自己,這個樣子也是很好的............................
補充一下乙個獲取sessionfactory的方式:
sessionfactory factory=wac.getbean(sessionfactory.class);
session session=factory.opensession();
java web定時任務
cron表示式由6或7個由空格分隔的時間字段組成,如表1所示 表1 cron表示式時間字段 位置時間網域名稱 允許值允許的特殊字元 秒0 59 分鐘0 59 小時0 23 日期1 31 l w c 月份1 12 星期1 7 l c 年 可選 空值1970 2099 cron表示式的時間欄位除允許設定...
javaweb集群實現定時任務搶占任務鎖
1 背景 資料庫中存在乙個預約時間表 t reserve 和乙個正在生效的時間表 t time 根據業務需求,在t reserve表中配置多個不同的時間,然後定時去更新t time表 2 問題 因為應用是集群部署,需要考慮 1 多程序的任務鎖搶占 2 當搶占到任務鎖的應用掛了,宕機的情況,沒有釋放任...
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...