• Quartz快速入门


    Quartz快速入门


    写此文章时的最新版是2.2.1。
     
    2.解压缩将基本包quartz-2.2.1.jar放到工程中,如果你工程中连log4j都没有的话,那就把日志相关的几个jar包一起放到工程中。
     
    3.配置
    创建quartz.properties文件
    org.quartz.scheduler.instanceName MyScheduler---------scheduler的名字,随便起一个名字(还是起个有点意义的名字吧)
    org.quartz.threadPool.threadCount= 3 --------线程池中最大线程数是3(最多三个job同时执行)
    org.quartz.scheduler.skipUpdateCheck true
    ---跳过Quartz的自动更新检查
    4.一下是代码了,为了方便将官方的代码靠过来稍作修改,代码里有标明。
     1 import org.quartz.Scheduler;
     2 import org.quartz.SchedulerException;
     3 import org.quartz.impl.StdSchedulerFactory;
     4 
     5 publicclassQuartzTest{
     6 
     7     publicstaticvoid main(String[] args){
     8 
     9         try{
    10             // Grab the Scheduler instance from the Factory
    11             //初始化scheduler,官方文档使用的后面的内容,所有配置都是默认值,为了使用我们辛苦配置的配置文件,我们用前面的方法。
    12             Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();//StdSchedulerFactory.getDefaultScheduler();
    13 
    14             // and start it off
    15             scheduler.start();
    16             //---------------插入执行的代码--------------------------
    17             scheduler.shutdown();
    18 
    19         }catch(SchedulerException se){
    20             se.printStackTrace();
    21         }
    22     }
    23 }
    以上代码就可以执行了,不过什么都没干,只是启动了和关闭了一下。- - !
    5. do something
        要do sth需要Job,Trigger这些都是Quartz里的基本元素。看名字也能明白Job是干活的蓝领。Trigger是触发Job执行的,定时任务最关键的时间就是靠定义Trigger是定义的。
    创建Job
    新建一个类实现Job接口并写execute方法实现。
     1 import java.util.Date;
     2 
     3 import org.apache.log4j.Logger;
     4 import org.quartz.Job;
     5 import org.quartz.JobExecutionContext;
     6 import org.quartz.JobExecutionException;
     7 
     8 public class JobTest implements Job{
     9 
    10     private static Logger logger = Logger.getLogger(JobTest.class);
    11     
    12     public void execute(JobExecutionContext arg0) throws JobExecutionException {
    13         logger.info("Hello world-----myQuartz-------class:JobTest  method:execute" + new Date());
    14         
    15     }
    16     
    17 }
    18 然后,在第4步-----插入执行的代码-------的位置插入以下代码
    19     try {
    20             //定义一个任务,并绑定JobTest(自己创建的任务类)
    21             JobBuilder jobBuilder = JobBuilder.newJob(JobTest.class);
    22             jobBuilder.withIdentity("Job1", "Group1");
    23             
    24             JobDetail job = jobBuilder.build();
    25                     //定义一个触发任务执行的触发器
    26             TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
    27             triggerBuilder.withIdentity("Trigger1", "TriggerGroup1");
    28             //定义执行时间
    29             Date runTime = DateBuilder.evenSecondDate(new Date());
    30             
    31             triggerBuilder.startAt(runTime);
    32             triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule().
    33                     withIntervalInMilliseconds(10000).repeatForever());
    34             
    35             Trigger trigger = triggerBuilder.build();
    36 
    37                      scheduler.scheduleJob(job, trigger);
    38             logger.info(job.getKey() + " will run at...: " + runTime);
    39             scheduler.start();
    40             logger.info("------- Started Scheduler -----------------");
    41             
    42             logger.info("------- Waiting 65 seconds... -------------");
    43             try {
    44                 Thread.sleep(65000);
    45             } catch (InterruptedException e) {
    46                 e.printStackTrace();
    47             }
    48             logger.info("------- Shutting Down ---------------------");
    49             scheduler.shutdown();
    50             logger.info("------- Shutdown Complete -----------------");
    51         } catch (SchedulerException e) {
    52             e.printStackTrace();
    53         }
    View Code
    汗!可算写完了,这么长。最好弄个Util工具类
    一下是我写的工具类,主要实现job和trigger的创建,大家借鉴:
     
     1 import java.util.Date;
     2 
     3 import org.quartz.Job;
     4 import org.quartz.JobBuilder;
     5 import org.quartz.JobDetail;
     6 import org.quartz.Scheduler;
     7 import org.quartz.SchedulerException;
     8 import org.quartz.SimpleScheduleBuilder;
     9 import org.quartz.Trigger;
    10 import org.quartz.TriggerBuilder;
    11 import org.quartz.impl.StdSchedulerFactory;
    12 
    13 /**
    14  * 定时任务工具类
    15  * @author llhua
    16  *
    17  */
    18 public class TaskUtil {
    19 /**
    20 * 初始化一个全部默认配置的scheduler
    21 * @return
    22 * @throws SchedulerException
    23 */
    24 public static Scheduler getDefaultScheduler() throws SchedulerException{
    25 return StdSchedulerFactory.getDefaultScheduler();
    26 }
    27 
    28 /**
    29 * 初始化一个通过配置文件配置的配置的scheduler
    30 * @return
    31 * @throws SchedulerException
    32 */
    33 public static Scheduler getScheduler(String confFile) throws SchedulerException{
    34 return new StdSchedulerFactory(confFile).getScheduler();
    35 }
    36 
    37 /**
    38 * 定义一个job
    39 * @param jobClazz
    40 * @param name
    41 * @param group
    42 * @return
    43 */
    44 public static JobDetail getJob(Class<? extends Job> jobClazz, String name, String group){
    45 return JobBuilder.newJob(jobClazz).withIdentity(name, group).build();
    46 }
    47 
    48 /**
    49 * 定义一个立即开始的触发器(.startNow())
    50 * @param schedBuilder
    51 * @param name
    52 * @param group
    53 * @return
    54 * 
    55 * SimpleScheduleBuilder一般用法
    56 * SimpleScheduleBuilder.simpleSchedule().
    57 withIntervalInMilliseconds(10000).repeatForever()
    58 */
    59 public static Trigger getSimpleTrigger(SimpleScheduleBuilder schedBuilder, String name, String group){
    60 return TriggerBuilder.newTrigger().withIdentity(name, group).startNow().withSchedule(schedBuilder).build();
    61 }
    62 /**
    63 * 定义一个在指定时间开始的触发器(.startAt())
    64 * @param schedBuilder
    65 * @param name
    66 * @param group
    67 * @return
    68 */
    69 public static Trigger getSimpleTrigger(Date runTime, SimpleScheduleBuilder schedBuilder, String name, String group){
    70 return TriggerBuilder.newTrigger().withIdentity(name, group).startAt(runTime).withSchedule(schedBuilder).build();
    71 }
    72 
    73 public static Trigger getCronTrigger(){
    74 return null;
    75 }
    76 
    77 public static Trigger getNthIncludedDayTrigger(){
    78 return null;
    79 }
    80 
    81 }
    View Code
    说明:最下面有三个get Trigger的方法代表了Quartz中已经有的三种Trigger,简单的已经可以实现基本的应用了,如有复杂应用可以实现下面两种。在下目前还没用到。





  • 相关阅读:
    基础学习总结(四)---内存获取、XML之PULL解析
    基础学习总结(三)--文本、SD卡数据读写
    基础学习总结(二)---认识布局与配置测试环境
    基础学习总结(一)--工程结构与打包过程
    StreamReader和StreamWrite与FileStream区别
    redis笔记
    linux 下文件显示行数
    php判断页面访问是移动端还是pc端
    redis
    判断链接是否为图片
  • 原文地址:https://www.cnblogs.com/llhua/p/3393306.html
Copyright © 2020-2023  润新知