java起一個定時任務,其實不難,代碼很簡單,只要你知道方法,2分鐘就搞掂了。java
定時任務控制類:app
package com.comit.sc.job.dms; import java.util.Calendar; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleTrigger; import org.quartz.impl.StdSchedulerFactory; import com.comit.sc.job.action.DmsTimedTaskJobAction; /** * @author zyf * @TODO 定時任務控制類 * */ public class DmsTimedTaskJob implements ServletContextListener { @SuppressWarnings("unused") private static final SimpleTrigger CronTrigger = null; public static void main(String[] args){ try { test(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void test() throws Exception{ //經過SchedulerFactory來獲取一個調度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler; try { scheduler = schedulerFactory.getScheduler(); //引進做業程序 JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class); //new一個觸發器 //SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1"); CronTrigger trigger = new CronTrigger("Test", null, "0 0 9 * * ?"); //表示天天9點執行 //設置做業啓動時間 //long ctime = System.currentTimeMillis()+1000*30; //表示30秒以後啓動 測試時用1000*5 //simpleTrigger.setStartTime(new Date(ctime)); Calendar cal = Calendar.getInstance(); trigger.setStartTime(cal.getTime()); //設置做業執行間隔 //simpleTrigger.setRepeatInterval(1000*18000); //設置成天天5個小時提醒一次18000 測試時用300 //設置做業執行次數 //simpleTrigger.setRepeatCount(-1); //測試時用10,-1表示無限次 //設置做業執行優先級默認爲5 // simpleTrigger.setPriority(10); //做業和觸發器設置到調度器中 scheduler.scheduleJob(jobDetail, trigger); //啓動調度器 scheduler.start(); } catch (SchedulerException e) { // TODO Auto-generated catch block System.out.println("啓動定時任務失敗!"); } } public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub //System.out.println("啓動觸發器"); try { test(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub //System.out.println("關閉觸發器"); } }
上述方法就已經啓動了一個定時器,天天早上9點執行。 測試
註解:code
JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);
這一行代碼引進一個做業,時間片到了,就會執行DmsTimedTaskJobAction類的execute方法。orm
CronTrigger trigger = new CronTrigger("Test", null, "0 0 9 * * ?"); //表示天天9點執行
這一行代碼產生一個定時器對象,並規定在天天早上9點鐘就會執行。對象
scheduler.scheduleJob(jobDetail, trigger);
這一行代碼將定時器和做業程序關聯,實現定時執行做業的效果。blog
定時任務控制類講解到此。get
下面介紹具體的做業程序。servlet
定時任務具體做業類:it
package com.comit.sc.job.action; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.comit.dockapply.service.DockApplyService; import com.comit.portlicenceinfo.service.PortLicenceInfoService; /** * 描述:定時任務 實體執行類 * * @author zyf * */ public class DmsTimedTaskJobAction implements Job{ /** * 序列號 */ private static final long serialVersionUID = 1427096854754L; public DmsTimedTaskJobAction() throws Exception{ super(); } /** * 全部須要執行的定時任務,都要寫在這個方法體內 */ public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("============================================================================================="); System.out.println(new SimpleDateFormat("yy年MM月dd日 hh:mm:ss").format(new Date())); try { System.out.println("********證書過時提早短信通知定時任務啓動!********"); //這裏添加具體須要執行的方法,這裏把我係統中的方法去掉了 System.out.println("********證書過時提早短信通知定時任務順利結束!********"); } catch (Exception e) { System.out.println("********證書過時提早短信通知定時任務執行失敗!********"); } System.out.println("============================================================================================="); } }
這個類就沒什麼好講的了。一看就懂了。
尾註:對於如何定義這個定時任務的執行時間,你們能夠參考下面這個連接的介紹,感謝這位網友的熱情分享。http://free0007.iteye.com/blog/1687936