2019獨角獸企業重金招聘python工程師標準》
專案中經常會碰到需要定時執行的任務,並且需要執行什麼任務,以及任務執行的時間都由使用者自定義的需求。quartz是比較常用的定時器工具,並且在spring框架中也已經做了很好的整合,所以在以spring+hibernate+struts的主流架構中,我們可以採用quartz來做定時器任務的解決方案,下面,我們來看下如何在專案中使用quartz來做動態多工定時器功能。
1.簡單單任務定時器的spring配置
initjobtrigger
* * * * * ?
initjobtrigger
* * * * * ?
說明:(1).initjobdetail例項宣告了需要執行的任務。其中targetobject說明了需要執行的方法所在的例項物件,targetmethod說明了要執行的方法,concurrent用於說明多個任務是否同步執行。
(2).inittrigger宣告了乙個觸發器。jobdetail屬性指明需要執行的任務,cronexpression宣告了該任務在什麼時候執行,該表示式跟linux下的crontab定時程式中使用的表示式是一樣的,具體使用方法可以參考文後的參考資料。
(3).schedule***ctorybean中可以定義多個觸發器,以實現多工。
2.動態多工實現
實現方式:使用者在前台自行維護任務列表和任務執行時間,後台將任務執行時間解析成對應的cronexpression後與任務列表一起儲存到資料庫中。在伺服器執行期間新增的任務通過驗證的(quartz會驗證cronexpression是否合法以及對應時間是否已經過期)將直接新增乙個任務以及觸發器。如果伺服器重啟,在專案啟動時讀取配置檔案執行一次任務初始化動作,保證通過驗證的任務能在觸發佇列中,並在到達指定時間時能夠觸發執行。
/**
* 容器啟動時初始化任務
* @throws schedulerexception
* @throws parseexception
*/
public void initjobtrigger() throws schedulerexception, parseexception);
if(null != list && list.size() > 0)catch(schedulerexception e)
}
}
//初始化任務只需要執行一次,執行一次後移除初始化觸發器
scheduler.unschedulejob("inittrigger", scheduler.default_group);
//任務啟動
scheduler.start();
} /** * 容器啟動時初始化任務
* @throws schedulerexception
* @throws parseexception
*/public void initjobtrigger() throws schedulerexception, parseexception);
if(null != list && list.size() > 0)catch(schedulerexception e)
}} //初始化任務只需要執行一次,執行一次後移除初始化觸發器
scheduler.unschedulejob("inittrigger", scheduler.default_group);
//任務啟動
scheduler.start();
}
(2).所有的觸發器執行的任務類均為reportjobtodo.class,reportjobtodo需要實現介面:org.quartz.job中的方法execute方法,參考**如下:
/**
* 報表生成任務
*/
public void execute(jobexecutioncontext je) throws jobexecutionexception );
if(null != list && list.size() > 0)
}
//如果有需要,可以將執行過的任務移除
//try catch (schedulerexception e)
} /** * 報表生成任務
*/public void execute(jobexecutioncontext je) throws jobexecutionexception );
if(null != list && list.size() > 0)
} //如果有需要,可以將執行過的任務移除
//try catch (schedulerexception e)
}
(3).對於每乙個任務提供啟用和禁用的功能,啟用時將任務加入到任務執行列表中,禁用時移除:
/**
* 啟動或禁止任務觸發器
* @param condition
* @throws schedulerexception
* @throws parseexception
*/
public static void enabletrigger(reportjobcondition condition) throws schedulerexception, parseexception);
if(null != list && list.size() > 0)else
rj.setenabled(reportjobconstants.false_string);
dao.updateobject(rj);
dao.flush();
}
//排程器啟動
scheduler.start();
}
} /** * 啟動或禁止任務觸發器
* @param condition
* @throws schedulerexception
* @throws parseexception
*/public static void enabletrigger(reportjobcondition condition) throws schedulerexception, parseexception);
if(null != list && list.size() > 0)else
rj.setenabled(reportjobconstants.false_string);
dao.updateobject(rj);
dao.flush();
}//排程器啟動
scheduler.start();
} }
Spring Quartz定時器詳情
排程常用查詢關鍵字 spring quartz多工 spring quartz spring quartz配置 spring quartz例子 spring quartz動態 spring quartz資料庫 spring quartz啟動 spring quartz使用 spring quartz...
spring quartz 定時器時間說明
0 0 12 每天中午12點觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 2005 2005年的每天上午10 15觸發 0 14 在每天下午2點到下午2 59期間的每1分鐘觸發 0 0 5 14 在每天下...
Spring Quartz定時器時間配置
格式 秒 分 小時 日 月 周 年 序號說明 是否必填 允許填寫的值 允許的萬用字元 1秒 是0 59 2分 是0 59 3小時 是0 23 4日 是1 31 l w5月 是1 12 or jan dec 6周 是1 7 or sun sat l 7年 否empty 或 1970 2099 萬用字元...