`
chaoyi
  • 浏览: 291064 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Quartz 固定时间间隔计划+Calendar和Cron

 
阅读更多

图示:

 

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();
	}
}

 

效果图:

 


 

  • 大小: 26.9 KB
  • 大小: 77.9 KB
  • 大小: 25.3 KB
  • 大小: 63.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics