java起一個定時任務,在規定的時間內自動執行

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

相關文章
相關標籤/搜索