图示:
Plan 实体类
package cn.entity;
/**
* 计划实体类
* */
public class Plan {
private String date;//时间
private String task;//任务
public Plan(String date, String task) {
this.date = date;
this.task = task;
}
@Override
public String toString() {
return " 计划[date=" + date + ", task=" + task + "]";
}
}
RemindService 业务逻辑类
package cn.service;
import java.util.ArrayList;
import java.util.List;
import cn.entity.Plan;
/**
* 业务逻辑类
* */
public class RemindService {
/**
* 输出任务的内容
* */
public void outputPlan(String userName){
List<Plan> plans = getPlansForToday(userName);
System.out.println(userName+"的提醒信息");
for (Plan plan : plans) {
System.out.println(plan);
}
}
/**
* 得到今天的任务
*/
public List<Plan> getPlansForToday(String userName){
List<Plan> list = new ArrayList<Plan>();
list.add(new Plan("2014-10-15 9:00", "地址:XXX"));
list.add(new Plan("2014-10-20 9:00", "地址:CCC"));
return list;
}
}
RemindJob 任务类
package cn.job;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import cn.service.RemindService;
/**
* 任务
* */
public class RemindJob implements Job {
private RemindService service = new RemindService();//调用业务类
public void execute(JobExecutionContext jobContext)
throws JobExecutionException{
//从 JobDetail 中取出参数
JobDataMap map = jobContext.getJobDetail().getJobDataMap();
String user = map.getString("user");
service.outputPlan(user);
//绑定的触发器的名字和每次任务触发时间
System.out.println("触发器名:"+jobContext.getTrigger().getName()+"\t触发时间:"
+new Date()+"\t任务名:"+jobContext.getJobDetail().getName());
}
}
TestJob 测试类
package cn.test;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.calendar.AnnualCalendar;
import cn.job.RemindJob;
public class TestJob {
public static void main(String[] args) throws SchedulerException,InterruptedException, ParseException {
TestJob testJob = new TestJob();
//testJob.doRemind();
testJob.calendarAndCron();
}
private void doRemind() throws SchedulerException,InterruptedException{
//1.创建一个任务(任务名,任务类)
JobDetail job = new JobDetail("remindJob", "myGroup", RemindJob.class);
//往 job 对象放入其它参数
JobDataMap map = job.getJobDataMap();
//放入参数
map.put("user", "李四");
//2.创建触发器(名字,运行次数(SimpleTrigger.REPEAT_INDEFINITELY 表示无限直到时间结束),时间间隔)
SimpleTrigger simTrig = new SimpleTrigger("trigRemindJob",
SimpleTrigger.REPEAT_INDEFINITELY, 3000);
//开始时间为下一秒
simTrig.setStartTime(new Date(System.currentTimeMillis()+1000));
//创建调度器
SchedulerFactory sfc = new StdSchedulerFactory();
Scheduler sched = sfc.getScheduler();
//3.把任务和触发器绑定
sched.scheduleJob(job, simTrig);
//计划任务开始
sched.start();
//当线程等待 10 秒
Thread.sleep(10000);
//计划任务结束
sched.shutdown();
}
private void calendarAndCron() throws SchedulerException,InterruptedException, ParseException{
JobDetail job = new JobDetail("remindJob", "group1", RemindJob.class);
JobDataMap dataMap = job.getJobDataMap();
dataMap.put("user", "张三");
//每个工作日的 9 点 30
CronTrigger cronTrig = new CronTrigger("remindJob", "group1", "10 14 11 ? * MON-FRI");
//每个工作日的每隔四秒出现一次
//CronTrigger cronTrig = new CronTrigger("remindJob", "group1", "0/4 * * ? * MON-FRI");
SchedulerFactory sfc = new StdSchedulerFactory();
Scheduler sched = sfc.getScheduler();
//创建 Calendar
AnnualCalendar cal = new AnnualCalendar();
//构建日期
Calendar myCal = Calendar.getInstance();
//1月
myCal.set(Calendar.MONDAY, Calendar.JANUARY);
//1号
myCal.set(Calendar.DATE, 1);
//设定要排除的日期
cal.setDayExcluded(myCal, true);
//注册 Calendar ,排除元旦节
sched.addCalendar("NewYearHoliday", cal, true, true);
//和触发器进行关联
cronTrig.setCalendarName("NewYearHoliday");
sched.scheduleJob(job, cronTrig);
sched.start();
}
}
效果图: