http://fanson59.blog.51cto.com/4423877/1272826
所需jar:
quartz-2.2.0.jar
quartz-jobs-2.2.0.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
log4j-1.2.16.jar
Quartz包括五种主要结构用于实现调度:
Job接口:Job接口表示一个作业(job)。一个作业专注做一件事。它的API非常简洁。只有一个execute方法,该方法在作业被执行时有Quartz调度。该方法有一个JobExecuteContext参数,可以通过该参数给execute()方法传递有用信息。
JobDetail类 :JobDetail用来描述一个特定Job的信息
Trigger 抽象类 :Job通过触发器(Trigger)触发。Quartz提供了集中Trigger的实现,如SimpleTrigger和CronTrigger。SimpleTrigger类似一个简单时钟,你可以定义开始是建,结束时间,重复次数,重复周期。CronTrigger的设置可以非常详细
Scheduler接口 :执行触发器
jobPause方法:暂停任务。
triggerJob主要是用于执行一次任务的场景,传入jobKey即可启动该任务
jobResume:恢复任务
checkExists:判断任务是否存在,jobKey把jonName和group用.组合起来,作为任务的唯一标志
SchedulerFactory 接口:SchedulerFactory 用于获得Scheduler实例,可以用于注册作业和触发器
定时执行的任务类,此类需实现Job接口
public void execute(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("Hello!@"+new Date().toString());
}
}
定义一个Scheduler,注册触发器和作业:
public class SimpleScheduler {
public static void main(String[] args) {
// TODO Auto-generated method stub
//SchedulerFactory 用于获得Scheduler实例,可以用于注册作业和触发器。
SchedulerFactory factory=new StdSchedulerFactory();
try {
// 初始化调度器
Scheduler scheduler=factory.getScheduler();
// 设置作业,具体操作在SimpleJob类里
JobDetail jobDetail=JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();
// 设置触发器 每5秒执行一次,可以对一个组创建一个 触发器,在该组内的所有Job都将会执行。
CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
//job关联一个Trigger,加入scheduler
scheduler.scheduleJob(jobDetail, cronTrigger);
//启动触发器
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
quartz和spring进行整合
http://blog.csdn.net/jackfrued/article/details/16918149
作业类可以是普通pojo类,不需要实现任何接口
applicationContext.xml配置文件
<beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 定义目标bean和bean中的方法 -->
<bean id="springQuartz" class="quartzJobBean.SpringQuartz"></bean>
<!-- 配置方法调用任务工厂(XXXJobDetailFactoryBean) -->
<bean id="springQuartzMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="springQuartz"/>
</property>
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<!-- 配置Cron触发器(CronTriggerFactoryBean) -->
<bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="springQuartzMethod"></property>
<property name="cronExpression" value="0/1 * * * * ?"></property><!--从现在开始,每1秒触发一次-->
</bean>
<!-- 配置调度器工厂(SchedulerFactoryBean) -->
<bean id="springSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger"/>
</list>
</property>
</bean>
</beans>
简单触发器开始时间小于当前时间,Misfire策略将任务(JOB)马上执行一次。scheduler不再保存任务信息。