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

相关文章
相关标签/搜索