`

Quartz---Application学习(二)

阅读更多

·创建并运行  Quartz Scheduler

当调度器起来之后,你可以利用它做很多事情或者获取到它的许多信息。例如,你也许需要安排一些 Job   或者改变又安排在调度器上  Job  的执行次数。你也许需要让调度器处于暂停模式,接着再次启动它以便重新执行在其上安排的作业。当调度器处于暂停模式时,不执行任何作业,即使是作业到了它所期待的执行时间。

public class SimpleScheduler {       
    static Log logger = LogFactory.getLog(SimpleScheduler.class);       
     
    public static void main(String[] args) {       
         SimpleScheduler simple = new SimpleScheduler();       
         simple.startScheduler();       
    }       
     
    public void startScheduler() {       
         Scheduler scheduler = null;       
     
         try {       
              // Get a Scheduler instance from the Factory       
              scheduler = StdSchedulerFactory.getDefaultScheduler();       
     
              // Start the scheduler       
              scheduler.start();       
              logger.info("Scheduler started at " + new Date());       
     
         } catch (SchedulerException ex) {       
              // deal with any exceptions       
              logger.error(ex);       
         }       
    }      
    
    private void modifyScheduler(Scheduler scheduler) {       
        
        try {       
             if (!scheduler.isInStandbyMode()) {       
                  // pause the scheduler       
                  scheduler.standby();       
             }            
             // Do something interesting here       
          
             // and then restart it       
             scheduler.start();          
        } catch (SchedulerException ex) {       
             logger.error(ex);       
        }       
    }  

}   

·编程式安排一个  Quartz Job

所有的要 Quartz  来执行的作业必须通过调度器来注册。大多情况下,这会在调度器启动前做好。

因为每一个 Job  都必须用  Scheduler  来注册,所以先定义一个  JobDetail ,并关联到这个  Scheduler  实例。

public class JobScheduler {       
    static Log logger = LogFactory.getLog(JobScheduler.class);       
     
    public static void main(String[] args) {       
    	JobScheduler example = new JobScheduler();       
     
         try {       
              // Create a Scheduler and schedule the Job       
              Scheduler scheduler = example.createScheduler();       
              example.scheduleJob(scheduler);       
     
              // Start the Scheduler running       
              scheduler.start();       
     
              logger.info( "Scheduler started at " + new Date());       
     
         } catch (SchedulerException ex) {       
              logger.error(ex);       
         }       
   }       
     
   /*     
    * return an instance of the Scheduler from the factory     
    */      
   public Scheduler createScheduler() throws SchedulerException {       
        return StdSchedulerFactory.getDefaultScheduler();       
   }       
     
   // Create and Schedule a ScanDirectoryJob with the Scheduler       
   private void scheduleJob(Scheduler scheduler)       
        throws SchedulerException {       
     
        // Create a JobDetail for the Job       
        JobDetail jobDetail =  new JobDetail("ScanDirectory",Scheduler.DEFAULT_GROUP,ScanDirectoryJob.class);       
     
        // Configure the directory to scan        
        jobDetail.getJobDataMap().put("SCAN_DIR","D:\\test");       
     
        // Create a trigger that fires every 10 seconds, forever       
        Trigger trigger = TriggerUtils.makeSecondlyTrigger(10);       
        trigger.setName("scanTrigger");       
        // Start the trigger firing from now       
        trigger.setStartTime(new Date());       
     
        // Associate the trigger with the job in the scheduler       
        scheduler.scheduleJob(jobDetail, trigger);       
   }       
}  
 

代码首先调用  createScheduler()  方法从 Scheduler  工厂获取一个  Scheduler  的实例。得到  Scheduler  实例之后,把它传递给  schedulerJob()  方法,由它把 Job  同  Scheduler  进行关联。

Trigger 的责任就是触发一个  Job  去执行。当用  Scheduler  注册一个  Job  的时候要创建一个  Trigger  与这个  Job  相关联。 Quartz  提供了四种类型的  Trigger ,但其中两种是最为常用的,它们就是在下面章节中要用到的  SimpleTrigger  和   CronTrigger .为更简单的使用 Trigger Quartz  包含了一个工具类,叫做  org.quartz.TriggerUtils TriggerUtils  提供了许多便捷的方法简化了构造和配置 trigger.  本章的例子中有用的就是  TriggerUtils  类; SimpleTrigger  和  CronTrigger  会在后面章节中用到。

调用了  TriggerUtils  的方法  makeSecondlyTrigger()  来创建一个每10 秒种激发一次的  trigger( 实际是由  TriggerUtils  生成了一个  SimpleTrigger  实例,但是我们的代码并不想知道这些)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics