本文共 6926 字,大约阅读时间需要 23 分钟。
项目中的调度任务可以使用Quartz任务调度框架
1、Job接口:这个接口里面只定义了一个方法,excute
void execute(JobExecutionContext context)
然后定义一个类实现该接口,就可以定义自己需要执行的任务了,JobExecutionContext类提供调度上下文的各种信息
2、JobDetail:用于描叙Job实现类及其他的一些静态信息
3、Trigger:描叙触发Job执行的时间触发规则
4、Scheduler:运行容器,使用SchedulerFactory创建Scheduler实例
Hello.java
1 import java.util.Date; 2 3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 7 public class HelloJob implements Job { 8 @Override 9 public void execute(JobExecutionContext context) throws JobExecutionException {10 System.out.println(String.format("Hello World! Time:%s", new Date()));11 }12 }
HelloWorldDeamo.java
1 import org.quartz.JobBuilder; 2 import org.quartz.JobDetail; 3 import org.quartz.Scheduler; 4 import org.quartz.SchedulerFactory; 5 import org.quartz.SimpleScheduleBuilder; 6 import org.quartz.Trigger; 7 import org.quartz.TriggerBuilder; 8 import org.quartz.impl.StdSchedulerFactory; 9 10 public class HelloWorldDemo {11 12 public static void main(String[] args) {13 try {14 // 通过schedulerFactory获取一个调度器15 SchedulerFactory schedulerfactory = new StdSchedulerFactory();16 // 通过schedulerFactory获取一个调度器17 Scheduler scheduler = schedulerfactory.getScheduler();18 // 创建jobDetail实例,绑定Job实现类19 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("helloJob", "jobGroup1").build();20 // 定义调度触发规则,本例中使用SimpleScheduleBuilder创建了一个5s执行一次的触发器21 Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "triggerGroup1").startNow()22 .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())23 .build();24 // 把作业和触发器注册到任务调度中25 scheduler.scheduleJob(jobDetail, trigger);26 // 启动调度27 scheduler.start();28 // 60s后关闭29 Thread.sleep(1000 * 30);30 scheduler.shutdown();31 System.out.println("调度任务结束");32 } catch (Exception e) {33 e.printStackTrace();34 }35 }36 }
1 import org.quartz.CronTrigger; 2 import org.quartz.JobDetail; 3 import org.quartz.Scheduler; 4 import org.quartz.Trigger; 5 import org.quartz.impl.StdSchedulerFactory; 6 7 /** 8 * 负责url调度 9 * 每天凌晨向url仓库中添加入口url10 */11 public class UrlManager {12 public static void main(String[] args){13 try{14 //获取默认调度器15 Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();16 //开启调度器17 defaultScheduler.start();18 //任务 19 JobDetail jobDetail = new JobDetail("url_job",Scheduler.DEFAULT_GROUP,UrlJob.class);20 //触发时间 凌晨一点 前三个参数是 秒 分 时21 Trigger trigger = new CronTrigger("url_job", Scheduler.DEFAULT_GROUP,"0 0 1 * * ?");22 //添加调度任务和触发时间23 defaultScheduler.scheduleJob(jobDetail,trigger);24 25 }catch (Exception e){26 e.printStackTrace();27 }28 }29 }
QuartzUtil.java
1 import org.quartz.Job; 2 import org.quartz.JobBuilder; 3 import org.quartz.JobDetail; 4 import org.quartz.Scheduler; 5 import org.quartz.SchedulerException; 6 import org.quartz.SchedulerFactory; 7 import org.quartz.SimpleScheduleBuilder; 8 import org.quartz.Trigger; 9 import org.quartz.TriggerBuilder;10 import org.quartz.impl.StdSchedulerFactory;11 import org.slf4j.Logger;12 import org.slf4j.LoggerFactory;13 14 /**15 * 任务调度公共类16 */17 public class QuartzUtil {18 19 private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任务组20 private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//触发器组21 private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日志22 23 /**24 * 添加任务的方法25 * @param jobName 任务名26 * @param triggerName 触发器名27 * @param jobClass 执行任务的类28 * @param seconds 间隔时间29 * @throws SchedulerException30 */31 public static void addJob(String jobName,String triggerName,Class jobClass,int seconds) throws SchedulerException{32 log.info("==================initialization=================");33 //创建一个SchedulerFactory工厂实例34 SchedulerFactory sf = new StdSchedulerFactory();35 //通过SchedulerFactory构建Scheduler对象 36 Scheduler sche = sf.getScheduler();37 log.info("===================initialize finshed===================");38 39 log.info("==============add the Job to Scheduler=================="); 40 41 //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例42 JobDetail jobDetail = JobBuilder.newJob(jobClass)43 .withIdentity(jobName, JOB_GROUP_NAME)44 .build();45 //构建一个触发器,规定触发的规则46 Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器47 .withIdentity(triggerName, TRIGGER_GROUP_NAME)//给触发器起一个名字和组名48 .startNow()//立即执行49 .withSchedule(50 SimpleScheduleBuilder.simpleSchedule()51 .withIntervalInSeconds(seconds)//时间间隔 单位:秒52 .repeatForever()//一直执行53 )54 .build();//产生触发器55 //向Scheduler中添加job任务和trigger触发器56 sche.scheduleJob(jobDetail, trigger);57 //启动58 sche.start();59 }60 61 /**62 * 测试63 * @param args64 */65 public static void main(String[] args) {66 try {67 //添加第一个任务 每隔10秒执行一次68 QuartzUtil.addJob("job1", "trigger1", TestJobOne.class, 2);69 70 //添加第二个任务 每隔20秒执行一次71 QuartzUtil.addJob("Job2", "trigger2", TestJobTwo.class, 5);72 } catch (SchedulerException e) {73 e.printStackTrace();74 }75 }76 }
TestJobOne.java
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 实际执行任务的业务类,需要实现Job接口 */public class TestJobOne implements Job { /** * 执行任务的方法 */ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("================执行任务一...."); //do more...这里可以执行其他需要执行的任务 }}
TestJobTwo.java
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 实际执行任务的业务类,需要实现Job接口 */public class TestJobTwo implements Job { /** * 执行任务的方法 */ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("================执行任务二...."); //do more...这里可以执行其他需要执行的任务 }}
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7603843.html,如需转载请自行联系原作者