howdy_world 发表于 2013-2-7 15:39:47

quartz自动作业使用

1.项目中导入quartz-1.5.2.jar.
2.创建一个执行类,用于定时执行某项任务.如:
package com.fleety.job;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.fleety.task.TestTask;
/**
* @name TestJob.java
* @author zhanghao
* @create Jun 14, 2011
*/
public class TestJob implements Job
{
    public void execute(JobExecutionContext context)
            throws JobExecutionException
    {
      System.out.println("test TestJob success :::" + new Date());
    }
}
3.创建测试类如:
package com.fleety.task;
import java.text.ParseException;
import java.util.Date;
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.fleety.job.TestJob;
/**
* @name TestTask.java
* @author zhanghao
* @create Jun 14, 2011
*/
public class TestTask
{
    /**
   * SimpleTrigger(优点,可以指定重复次数和重复间隔)
   *
   * @throws SchedulerException
   */
    public static void taskSimpleTrigger() throws SchedulerException
    {
      // 创建一个作业工厂
      SchedulerFactory factory = new StdSchedulerFactory();
      // 得到作业调度对象
      Scheduler scheduler = factory.getScheduler();
      // 当前系统时间
      long currentTime = System.currentTimeMillis();
      // 作业对象
      JobDetail detail = new JobDetail("detail-s1", "detailGroup-s1",
                TestJob.class);
      // 触发器
      SimpleTrigger trigger = new SimpleTrigger("trigger", "triggerGroup-s1");
      // 指定触发时间
      trigger.setStartTime(new Date(currentTime));
      // 每隔多少时间触发一次
      trigger.setRepeatInterval(1000);
      // 触发多少次
      trigger.setRepeatCount(10);
      // 作业调度
      scheduler.scheduleJob(detail, trigger);
      // 启动作业调度
      scheduler.start();
    }
    /**
   * CronTrigger(优点,支持类似日历的重复间隔,而不是单一的时间间隔)
   */
    public static void taskCronTrigger()
    {
      try
      {
            // 创建作业调度对象
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            // 启动调度
            scheduler.start();
            // 创建作业对象
            JobDetail jobDetail = new JobDetail("TestJob", Scheduler.DEFAULT_GROUP, TestJob.class);
            // 创建触发器
            CronTrigger cronTrigger = new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP);
            // 设置触发时间(需要注意,天数和星期数不能同时指明,比如指明了某天,星期数就要用?来表示,指明了星期数,天数就用?表示)

            //每天的9点58分执行
            // cronTrigger.setCronExpression("0 58 9 * * ?");

            //表示每天的10点13分的5秒,10秒,15秒,20秒各执行一次
             cronTrigger.setCronExpression("5,10,15,20 13 10 * * ?");

            // 表示每天的10点17分,从0秒开始,每隔5秒执行一次
            // cronTrigger.setCronExpression("0/5 17 10 * * ?");

            //表示在2011年的6月15号的10点39分40秒执行一次
            // cronTrigger.setCronExpression("40 39 10 15 06 ? 2011");

            //表示每个星期4的10点47分20秒执行
            // cronTrigger.setCronExpression("20 47 10 ? * 4");

            //表示每个星期月的第三个星期3的11点55分的30秒--45秒之间,每隔一秒执行一次
            // cronTrigger.setCronExpression("30-45 55 11 ? * 4#3");

            //表示每个月的15号的12点整执行,但条件是(如果15号是工作日的话(即,星期一到星期五),那么执行,如果不是工作日的话,假如15号这天是星期6,那么则在14号这天执行,如果15号这天是星期天的话,则在16号执行)
            // cronTrigger.setCronExpression("00 00 12 15w * ?");

            //表示每个月的最后一个星期4的13点18分执行
            // cronTrigger.setCronExpression("00 18 13 ? * 5L");

            // 触发
            scheduler.scheduleJob(jobDetail, cronTrigger);
      }
      catch (SchedulerException e)
      {
            // TODO Auto-generated catch block
            e.printStackTrace();
      }
      catch (ParseException e)
      {
            // TODO Auto-generated catch block
            e.printStackTrace();
      }

    }
    public static void main(String[] args)
    {
         TestTask.taskCronTrigger();
    }
}
附件为一个完整可运行的例子
页: [1]
查看完整版本: quartz自动作业使用