quartz 任务调度
3个基本概念
任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义,Job接口中只有一个execute()方法,开发者需要在自己的任务类中实现该方法。
触发器:定义触发Job执行的时间的触发规则。Quartz提供Trigger类及其子类支持触发器功能。
调度器:Quartz提供了Scheduler接口,它是Quartz独立运行的容器。将工作任务和触发器注册到调度器中,保证任务可以在正确的时间执行。
jar
创建任务
package com.znsd.quartz.demo;
import java.util.Date;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class Test {
public static void main(String[] args) throws SchedulerException {
//---创建一个任务的实列(JobDetail)
JobDetail build = JobBuilder.newJob(MyJob.class)
.usingJobData("name","zhangsan") //传递参数
.withIdentity("myjob", "group1").build();
//---创建一个触发器(Trigger)
SimpleTrigger build2 = TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "group1")
//.startAt(new Date(System.currentTimeMillis()+5000)) 设定多少时间后执行
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5) //每隔5秒启动一次
.withRepeatCount(3) //循环3次 使用该方法不可使用repeatForever方法
//.repeatForever() //
).build();
/*String cron = "00 32 7 * * ?"; //使用cron表达式
Trigger build2 = TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.forJob(build)
.build();*/
// 创建调度器
Scheduler s = new StdSchedulerFactory().getScheduler();
s.scheduleJob(build, build2);
s.start();
}
}
调度
package com.znsd.quartz.demo;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
public class MyJob implements Job{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void execute(JobExecutionContext job) throws JobExecutionException {
JobKey key = job.getJobDetail().getKey();
System.out.println(key); //----获取任务名字
//获取传递来的参数
//JobDataMap map = job.getJobDetail().getJobDataMap();
//System.out.println(map.getString("name"));
//若该类有对应名称的setter方法则不需要使用getJobDataMap方法获取参数
System.out.println(name);
System.out.println("这是循环内容!!");
}
}
Quarts常用的接口
Job : 执行任务调度的组件要实现的接口。
JobDetail : 用来定义Job的实例
JobBuilder :用来定义或创建JobDetail的实例
Tigger :定义一个Job何时被执行的组件,也称触发器。
TriggerBuilder: 用来创建Tigger的实例
Scheduler :跟任务调度相关的接口
调度的声明周期,起于SchedulerFactory的创建,止于shutdown()方法。
SimpleTrigger属性和方法
jobKey :获取任务名称
Identity :设置表示列,对应withIdentity()方法
stratTime :设置开始时间,对应startAt()方法
endTime :设置结束时间,对应endAt()方法
Priority :优先级设置。对应withPriority()方法
cron表达式
Cron表达式由6~7个由空格分隔的时间元素组成。第7个元素可选
spring整合Quartz
所需jar包
电脑配置不行导入aop和aspects会让eclipse终止运行
<!-- 定义任务 -->
<bean id="myjob" class="com.znsd.sq.demo.MyJob"></bean>
<!-- 添加任务 -->
<bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myjob"/>
<property name="targetMethod" value="task"/>
</bean>
<!-- 配置SimpleTrigger任务调度器 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail1" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="2000" />
</bean>
<!-- 配置触发器开始 -->
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean>
<!-- 配置CronTrigger任务调度器 -->
<!-- <bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail1" />
<property name="cronExpression" value="0/2 * * * * ?" /> 使用cron表达式
</bean>
配置触发器开始
<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
<ref bean="crontestJobTrigger"/>
</list>
</property>
</bean> -->
执行的任务
package com.znsd.sq.demo;
public class MyJob {
public void task() {
System.out.println("执行的任务");
}
}
启动
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");