Quartz 定时任务

匿名 (未验证) 提交于 2019-12-03 00:26:01

转载请标明出处: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 定时任务
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!