转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80657415
本文出自【赵彦军的博客】
在 JavaEE
系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。
我们可以使用java.util.Timer
结合java.util.TimerTask
来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。
使用Quartz
框架无疑是非常好的选择,并且与Spring
可以非常方便的集成,下面介绍它们集成方法和Cron
表达式的详细介绍。
官网:http://www.quartz-scheduler.org/
依赖:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
创建 Job
package com.yiba.didiapi.job; import org.quartz.*; import java.util.Date; public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("任务执行了: "); JobDataMap dataMap = context.getMergedJobDataMap(); String name = dataMap.getString("name"); //获取名字 Integer age = dataMap.getInt("age"); //获取年龄 System.out.println("name: " + name + " age:" + age); JobDetail jobDetail = context.getJobDetail(); String jobName = jobDetail.getKey().getName(); String jobGroup = jobDetail.getKey().getGroup(); System.out.println("jobName: " + jobName + " jobGroup:" + jobGroup); Trigger trigger = context.getTrigger(); String triggerName = trigger.getKey().getName(); String triggerGroup = trigger.getKey().getGroup(); Date startTime = trigger.getStartTime(); //获取任务开始时间 Date endTime = trigger.getEndTime(); //获取任务结束时间 System.out.println("triggerName: " + triggerName + " triggerGroup:" + triggerGroup); } }
创建 JobScheduler
package com.yiba.didiapi.job; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; public class JobScheduler { public static void main(String[] args) { JobDetail jobDetail = JobBuilder .newJob(MyJob.class) .withIdentity("jobName", "jobGroup") //定义job的名字和组 .usingJobData("name", "yanjun") //传参数,key:name value:yanjun .usingJobData("age", 18) //传参数,key:age value:18 .build(); //定义开始时间 Date startDate = new Date(); //定义结束时间,在开始时间之后10秒 Date endDate = new Date(startDate.getTime() + 10 * 1000); //触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("triggerName", "triggerGroup") .startNow() //现在开始执行 .startAt(startDate) //在指定的时间开始执行 .endAt(endDate) //在指定的时间结束执行 .withSchedule(SimpleScheduleBuilder .simpleSchedule() .repeatForever() //永远执行下去 .withIntervalInSeconds(1) //一秒钟执行一次 ) .build(); try { SchedulerFactory factory = new StdSchedulerFactory(); Scheduler scheduler = factory.getScheduler(); scheduler.scheduleJob(jobDetail,trigger); scheduler.start(); //开始执行 } catch (SchedulerException e) { e.printStackTrace(); } } }
个人微信号:zhaoyanjun125 , 欢迎关注

文章来源: Quartz 定时任务