1.任务
Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在 JobDataMap实例中;
2.触发器
Trigger:是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;
3.调度器
JobDetail:Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。
创建一个Quartz工作
1.计划实体类/**
*
*计划实体类
*/
public class Plan {
private String date;
private String task;
public Plan(String date, String task) {
this.date = date;
this.task = task;
}
public Plan() {
}
@Override
public String toString() {
return "Plan [date=" + date + ", task=" + task + "]";
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTask() {
return task;
}
public void setTask(String task) {
this.task = task;
}
}
2.提醒服务类/**
*
* @提醒服务类
*
*/
public class RemindService {
//数据查询
public ListgetPlansForToday(){
Listlist=new ArrayList();
Plan p1=new Plan("2016-11-3","呵呵");
Plan p2=new Plan("2016-11-4","嘿嘿");
list.add(p1);
list.add(p2);
return list;
}
//提醒服务类
public void ouputPlan(){
ListforToday = getPlansForToday();
for (Plan plan : forToday) {
System.out.println("计划时间"+plan.getDate()+"计划内容"+plan.getTask());
}
}
}
3.提醒任务类/**
*
* @提醒任务类
*
*/
public class RemindJob implements Job {
private RemindService service=new RemindService();
public void execute(JobExecutionContext arg0) throws JobExecutionException {
service.getPlansForToday();
}
public RemindService getService() {
return service;
}
public void setService(RemindService service) {
this.service = service;
}
}
4.调度定时器任务public class TestJob {
public static void doRemind() throws SchedulerException, InterruptedException{
//创建一个任务
JobDetail job =JobBuilder.newJob(RemindJob.class).withIdentity("job1", "group1").build();
//创建一个触发器
/*Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(TriggerKey.triggerKey("myTrigger", "myTriggerGroup"))
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMilliseconds(2))
.startAt(new Date(System.currentTimeMillis()+2000))
.build();*/
Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").
withSchedule(CronScheduleBuilder.cronSchedule("0 34 16 ? * 5#1 2016")).build();
SchedulerFactory s=new StdSchedulerFactory();
Scheduler scheduler = s.getScheduler();
//注册并进行调度
scheduler.scheduleJob(job,trigger);
//启动调度
scheduler.start();
//睡眠10s
//Thread.sleep(10000);
//关闭调度
//scheduler.shutdown();
}
public static void main(String[] args) throws SchedulerException, InterruptedException {
doRemind();
}
}
Cron表达式
本文原创发布php中文网,转载请注明出处,感谢您的尊重!