一:定义
Job:实现任务逻辑的接口。
JobDeatil:JobDeatil为Job提供了许多设置属性,以及JobDataMap成员变量属性,他用来储存特定的Job实例状态信息,调度器需要使用JobDeatil对象添加Job实例。
二:
Job接口源码:
public interface Job { void execute(JobExecutionContext context) throws JobExecutionException; }
Job有且只有一个方法:execute() 负责执行业务逻辑。
JobExecutionContext:包含job执行的上下文。里面包含了一个重要的类(JobDataMap :主要是包含我们想要输入的参数)。
这个方法要抛出一个异常 JobExecutionException。
JobDeatil的重要属性:
name:任务的名称。
group:任务所在的组(默认值:DEFAULT)。
jobClass:任务的实现类。
jobDataMap:传参的作用。
代码是上一节的代码:
实现代码:JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName","group").build();
JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName","group").build(); System.out.println(jobDetail.getKey().getName());//jobName System.out.println(jobDetail.getKey().getGroup());//group System.out.println(jobDetail.getJobClass().getName());//quartz.JobClass
jobDataMap
JobDataMap中可以包含不限量的(序列化的)数据对象,在job实例执行的时候,可以使用其中的数据;JobDataMap是Java Map接口的一个实现,额外增加了一些便于存取基本类型的数据的方法。
实现:
JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName", "group") .usingJobData("Double", 2.0D) .usingJobData("String", "字符串").build(); System.out.println(jobDetail.getJobDataMap().getString("String"));//字符串 System.out.println(jobDetail.getJobDataMap().getDoubleValue("Double"));//2.0
在job的执行过程中,可以从JobDataMap中取出数据
第二种获取的:
是在JobClass里设置属性,这里的属性名称必须和jobDetail设置的key值相同;
package quartz; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; public class JobClass implements Job { private String stringValue; private Double doubleValue; public String getStringValue() { return stringValue; } public void setStringValue(String stringValue) { this.stringValue = stringValue; } public Double getDoubleValue() { return doubleValue; } public void setDoubleValue(Double doubleValue) { this.doubleValue = doubleValue; } public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println(stringValue + doubleValue); /* * JobKey jobKey=arg0.getJobDetail().getKey(); * System.out.println(jobKey.getGroup()+jobKey.getName()); */ /* * Date date=new Date(); SimpleDateFormat sf=new SimpleDateFormat( * "yyyy-MM-dd HH:mm:ss"); System.out.println("当前时间为:"+sf.format(date)); * // 编写业务逻辑 System.out.println("hello Quartz"); */ /* * JobDataMap jobDataMap=arg0.getJobDetail().getJobDataMap(); * System.out.println(jobDataMap.getDouble("Double")); * System.out.println(jobDataMap.getString("String")); */ } }
三:生命周期
每次在调度器在执行job的时候,他是在execute()方法前创建一个新的job实例。当调用完之后,关联的job对象实例会被释放,释放之后将会被垃圾回收机制回收。