至于Quartz到底是什么,可以看我上一篇转载的文章,或者百度。下面直接举例:
1.Spring配置Quartz
a.需要导入quartz的jar包:
quartz-2.1.7.jar
b.【Spring配置文件ApplicationContext.xml】
<!-- 启动触发器的配置开始 -->
<bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger_1" />
<ref bean="myJobTrigger_2" />
</list>
</property>
</bean>
<!-- quartz-2.x的配置 -->
<bean id="myJobTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail_1" />
</property>
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- job的配置开始 -->
<bean id="myJobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myJob_1" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- 工作的bean -->
<bean id="myJob_1" class="com.myb.timertask.SysQuartzJob" />
<!-- quartz-2.x的配置 (第二个quartz定时任务)-->
<bean id="myJobTrigger_2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail_2" />
</property>
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
<!-- job的配置开始 -->
<bean id="myJobDetail_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myJob_2" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- 工作的bean -->
<bean id="myJob_2" class="com.myb.timertask.SysQuartzJob2" />
c.【job bean对应的java】
package com.myb.timertask;
import javax.annotation.Resource;
import com.myb.service.util.MybUtilService;
import com.myb.util.DateUtil;
/**
*
* <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/>
* <b>类名称:</b>SysQuartzJob<br/>
* <b>类描述:</b> Quartz定时任务示例 <br/>
* <b>版本:</b>V1.0<br/>
* <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>
* <b>创建时间:</b>2016年3月5日 下午10:21:22<br/>
*/
public class SysQuartzJob {
@Resource(name="mybUtilService")
private MybUtilService mybUtilService;
public void work() throws Exception{
System.out.println("第一个定时任务:"+DateUtil.getTime());
}
}
package com.myb.timertask;
import javax.annotation.Resource;
import com.myb.service.util.MybUtilService;
import com.myb.util.DateUtil;
/**
*
* <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/>
* <b>类名称:</b>SysQuartzJob<br/>
* <b>类描述:</b> Quartz定时任务示例 <br/>
* <b>版本:</b>V1.0<br/>
* <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>
* <b>创建时间:</b>2016年3月5日 下午10:22:01<br/>
*/
public class SysQuartzJob2 {
@Resource(name="mybUtilService")
private MybUtilService mybUtilService;
public void work() throws Exception{
System.out.println("第二个定时任务:"+DateUtil.getTime());
}
}
2. 直接调用Quartz方法
a.创建要被定执行的任务类,实现org.quartz.Job接口,并实现这个接口的唯一一个方法execute(JobExecutionContext arg0) throws JobExecutionException
package com.myb.timertask;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.myb.util.DateUtil;
/**
*
* <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/>
* <b>类名称:</b>SysQuartzJob<br/>
* <b>类描述:</b> Quartz定时任务示例 <br/>
* <b>版本:</b>V1.0<br/>
* <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>
* <b>创建时间:</b>2016年3月5日 下午10:29:47<br/>
*/
public class SysJob implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("SysJob,系统任务:"+DateUtil.getTime());
}
}
b.创建任务调度,并执行
package com.myb.timertask;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
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.impl.StdSchedulerFactory;
import com.myb.util.DateUtil;
/**
*
* <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/>
* <b>类名称:</b>SysQuartzJob<br/>
* <b>类描述:</b> Quartz定时任务示例 <br/>
* <b>版本:</b>V1.0<br/>
* <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>
* <b>创建时间:</b>2016年3月5日 下午10:31:20<br/>
*/
public class TestQuartz {
public static void main(String[] arsg) throws SchedulerException{
new TestQuartz().execute();
}
public void execute() throws SchedulerException{
//创建调度器工厂(Scheduler的引用 )
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
//jobs可以在scheduled的sched.start()方法前被调用
//job 1将每隔20秒执行一次
JobDetail job = newJob(SysJob.class).withIdentity("job1", "group1").build();
CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build();
Date ft = sched.scheduleJob(job, trigger);
System.out.println(job.getKey() + " 已被安排执行于: " + DateUtil.getTime() + ",并且以如下重复规则重复执行: " + trigger.getCronExpression());
// job 2将每2分钟执行一次(在该分钟的第15秒)
job = newJob(SysJob.class).withIdentity("job2", "group1").build();
trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule("0/25 * * * * ?")).build();
ft = sched.scheduleJob(job, trigger);
System.out.println(job.getKey() + " 已被安排执行于: " + DateUtil.getTime() + ",并且以如下重复规则重复执行: "+ trigger.getCronExpression());
// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job
sched.start();
try {
//主线程等待一分钟
Thread.sleep(60L * 1000L);
} catch (Exception e) {}
//关闭定时调度,定时器不再工作
sched.shutdown(true);
}
}
cronExpression表达式,参考我上一篇转载的文章。