任务调度
使用 Quartz 框架实现 1.8.6 的版本 开源框架
什么是任务调度:即是某个时间点做某件时间!
核心有是什么:以时间为关注点!即在一个特定的时间点系统执行的 一个操作!
核心有什么:
1.任务:就是需要被执行的工作内容!
实现 Job 接口重写 execute() 方法的编写
2.触发器:决定什么时候执行任务!
创建 Trigger 类定义 Job 执行的时间触发规则, Trigger 提供了两个实现类,分别:
①SimpleTigger:以时间段为关注点
每隔‘若干’秒执行一次或每指定时间段无限次执行
②CronTrigger:以指定的时间为关注点
到达指定的时间点执行
3.调度器:实现将工作任务和触发器绑定,保证任务被执行!
创建 SchedulerFactory 对象, 并通过其 getScheduler() 方法得到 Scheduler 对象,并 通过其 scheduleJob() 方法绑定任务和触发器
最后使用其 start()方法开启执行任务
实现方式:
参考 Demo:QuartzDemo
1.国际惯例先在项目中创建 lib 文件夹导入包:
① log4j-1.2.14.jar
② quartz-all-1.8.6.jar
③ slf4j-api-1.6.0.jar
④ slf4j-log4j12-1.6.0.jar
2.创建实体类 AdviceJob ,定义属性并提供 get |set 方法
3.创建被执行的任务类 AdviceJobQuartz ,实现 Job 接口重写 execute() 方法编写
4.创建触发器 CronTriggerAdvice (固体时间执行)
或 SimpleTriggerAdvice (时间段内执行) 具体参考项目中的实现方式
5.直接执行!
触发器中定义查询,如有特殊要求:例如元旦放假那天就不用执行任务..
解决方案则是使用 Calendar 类(排除某一天)
例子:
① 创建任务对象
JobDetail jobDetail = new JobDetail("jobDetailName","jobDetailGroup",AdviceJobQuartz.class);
jobDetail.getJobDataMap().put("empName","哆啦");
② 创建触发器
CronTrigger cronTrigger = new CronTrigger("cronTriggerName","cronTriggerGroup","20 58 16 * * ? 2016");
③ 创建调度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
④ 创建 Calendar
AnnualCalendar cal = new AnnualCalendar();
Calendar myCal = GregorianCalendar.getInstance();
myCal.set(Calendar.MONTH,Calendar.JANUARY);
myCal.set(Calendar.DATE,1);
cla.SetDayExcluded(myCal,true); // 加入要排除的日期
sched.addCalendar("NewYearHoliday",cal,true,true); //用 Calendar 注册
cronTrigger.setCalendarName("NewYearHoliday"); // 与 Trigger 关联
⑤ 绑定触发器和任务
scheduler.scheduleJob(jobDetail, cronTrigger);
⑥ 启动任务
scheduler.start();
⑦ 关闭任务(注意关闭前需要 Thread.sleep(10000); 暂停一秒钟,这一秒钟是被执行任务的时间 SimpleTrigger 则不需要关闭)
scheduler.shutdown();