quartz 實例記錄

  以前介紹過了quartz的一些相關理論知識,感受上挺簡單的,實際動手操做也確實如此,去quartz的官網上把Jar包下載下來之後,會看到它的目錄裏有例子程序,看完第一個例子以爲還能夠,可是看後面兩個例子程序有點讓人小小的無語,可能quartz以爲程序寫的越多,給出的使用方法也會越多,可是看上去很亂,並且大部分代碼是重複的,因此我把他們簡單化成一個例子,把它們記錄下來。java

  本文一共有兩個例子,這兩個例子共用一個Job的實現,叫MyJob類,代碼以下express

package com.jll.quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyJob implements Job {

    private static Logger logger = LoggerFactory.getLogger(MyJob.class);

    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        logger.info(context.getJobDetail().getKey() + " start to work at"
                + new Date());
    }

}

下面的代碼是第一個例子,設置重複的次數和重複時間的ide

package com.jll.quartz;

import java.util.Date;

import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SimpleExample {
    
    public void run() throws SchedulerException{
        
        Logger log = LoggerFactory.getLogger(SimpleExample.class);
        log.info("------- Initializing ----------------------");
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler sched = factory.getScheduler();
        log.info("------- Initialization Complete -----------");

        log.info("------- Scheduling Job  -------------------");
        
        Date startTime = DateBuilder.evenMinuteDate(new Date());

        JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

        SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(10)).build();

        Date ft = sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000L + " seconds");
        sched.start();
        
        try
        {
          Thread.sleep(30000L);
        }
        catch (Exception e)
        {
        }

       
      }

      public static void main(String[] args)
        throws Exception
      {
        SimpleExample example = new SimpleExample();
        example.run();
      }
    }

從代碼中能夠看出來任務重複10次,每1秒重複一次ui

 

第二個例子是使用CronExpression表達式的,spa

package com.jll.quartz;

import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CronExpressionExample {

    public void run() throws SchedulerException {
        Logger log = LoggerFactory.getLogger(CronExpressionExample.class);

        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler sched = factory.getScheduler();

        JobDetail job = JobBuilder.newJob(MyJob.class)
                .withIdentity("job1", "group1").build();

        CronTrigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(
                        CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
                .build();

        Date date = sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " has been scheduled to run at: " + date
                + " and repeat based on expression: "
                + trigger.getCronExpression());
        
        sched.start();

        log.info("------- Started Scheduler -----------------");

        try
        {
          Thread.sleep(30000L);
        }
        catch (Exception e)
        {
        }

        log.info("------- Shutting Down ---------------------");

        sched.shutdown(true);

        log.info("------- Shutdown Complete -----------------");

        SchedulerMetaData metaData = sched.getMetaData();
        log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    }
    
    public static void main(String[] args)
            throws Exception
          {
            CronExpressionExample example = new CronExpressionExample();
            example.run();
          }

}

從上面的代碼能夠看出來任務每兩秒鐘執行一次,主線程30秒後死亡。線程

相關文章
相關標籤/搜索