Spring quartz定時器動態多工實現

2021-09-24 13:01:46 字數 3422 閱讀 1077

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 萬用字元...