quartz的使用配置
首先引入quartz的相关包
方式一:就是用quartz的
首先创建一个job的实现类
package com.asiainfo.mongo.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("========="+new Date());
}
}
然后job任务创建,定义触发器(分为两类 这里不做解释),启动任务调度
package com.asiainfo.mongo.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class JobStart {
public static void main(String[] args) throws Exception {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
//job任务的创建
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("helloWorldJob", scheduler.DEFAULT_GROUP).build();
//触发器
CronTrigger CronTrigger = (CronTrigger) TriggerBuilder
.newTrigger()
.withIdentity("helloWorldtrigger", scheduler.DEFAULT_GROUP)
.withSchedule(CronScheduleBuilder.cronSchedule("0/13 * * * * ?"))
.build();
//任务调度
scheduler.scheduleJob(jobDetail, CronTrigger);
//开始任务调度
scheduler.start();
for(int i=0;i<2;i++){
//job任务的创建
JobDetail jobDetail2 = JobBuilder.newJob(OtherTestJob.class)
.withIdentity("otherJob", scheduler.DEFAULT_GROUP).build();
jobDetail2.getJobDataMap().put("TaskId", "99999");
//触发器
CronTrigger CronTrigger2 = (CronTrigger) TriggerBuilder
.newTrigger()
.withIdentity("othertrigger", scheduler.DEFAULT_GROUP)
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
scheduler.scheduleJob(jobDetail2, CronTrigger2);
}
}
}
测试结果:
99999
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - batch acquisition of 1 triggers
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - Producing instance of Job 'DEFAULT.helloWorldJob', class=com.asiainfo.mongo.quartz.HelloJob
DEBUG [DefaultQuartzScheduler_Worker-5] - Calling execute on job DEFAULT.helloWorldJob
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - batch acquisition of 1 triggers
=========Wed Apr 13 23:21:13 GMT+08:00 2016
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - Producing instance of Job 'DEFAULT.otherJob', class=com.asiainfo.mongo.quartz.OtherTestJob
DEBUG [DefaultQuartzScheduler_Worker-6] - Calling execute on job DEFAULT.otherJob
99999
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - batch acquisition of 1 triggers
DEBUG [DefaultQuartzScheduler_QuartzSchedulerThread] - Producing instance of Job 'DEFAULT.otherJob', class=com.asiainfo.mongo.quartz.OtherTestJob
DEBUG [DefaultQuartzScheduler_Worker-7] - Calling execute on job DEFAULT.otherJob
99999
方式二:
使用spring集成的quartz
首先配置xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 工作的bean -->
<bean id="myJob" class="com.asiainfo.mongo.quartz.TestJob" />
<!-- job的配置开始 -->
<bean id="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myJob" />
</property>
<property name="targetMethod">
<value>doSomething</value>
</property>
</bean>
<!-- job的配置结束 -->
<!-- 调度的配置开始 -->
<bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/13 * * * * ?</value>
</property>
</bean>
<!-- 调度的配置结束 -->
<!-- 启动触发器的配置开始 -->
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="crontestJobTrigger" />
</list>
</property>
</bean>
<!-- 启动触发器的配置结束 -->
</beans>
然后同样也要定义一个job的实现类,来实现job任务的相关功能
package com.asiainfo.mongo.quartz;
import java.util.Date;
public class TestJob{
public void doSomething(){
System.out.println("===="+new Date());
}
}
测试结果:
启动tomcat时候:
DEBUG [startQuertz_Worker-1] - Calling execute on job DEFAULT.myJobDetail
DEBUG [startQuertz_QuartzSchedulerThread] - batch acquisition of 1 triggers
====Wed Apr 13 23:22:39 GMT+08:00 2016
DEBUG [startQuertz_QuartzSchedulerThread] - batch acquisition of 1 triggers
DEBUG [startQuertz_Worker-2] - Calling execute on job DEFAULT.myJobDetail
====Wed Apr 13 23:22:52 GMT+08:00 2016