当前位置: 代码迷 >> Web前端 >> quartz自动功课使用
  详细解决方案

quartz自动功课使用

热度:115   发布时间:2012-09-06 10:37:01.0
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();
}

}
附件为一个完整可运行的例子

  相关解决方案