使用quartz实现作业调度

上篇文章中提到了“定时装置”可以用来实现图书系统得定时提醒管理员图书到期。这个时候用Timer明显有些不方便。这次为大家推荐一个开源组织(OpenSymphony)做的Quartz,Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs复杂得作业调度。我使用的版本是Quartz 1.6。

  源码如下:

Java代码 复制代码
  1. SimpleQuartzJob.java   
  2.   
  3.   package cn.javaoop.dream.quartz;   
  4.   
  5.   import java.io.File;   
  6.   
  7.   import java.io.FileReader;   
  8.   
  9.   import java.io.FileWriter;   
  10.   
  11.   import java.io.IOException;   
  12.   
  13.   import org.quartz.Job;   
  14.   
  15.   import org.quartz.JobExecutionContext;   
  16.   
  17.   import org.quartz.JobExecutionException;   
  18.   
  19.   /**  
  20.  
  21.   * 读取D盘文件将其内容写入C盘文件中  
  22.  
  23.   * @author JavaChaos  
  24.  
  25.   *  
  26.  
  27.   */  
  28.   
  29.   public class SimpleQuartzJob implements Job {   
  30.   
  31.   @Override  
  32.   
  33.   public void execute(JobExecutionContext context)   
  34.   
  35.   throws JobExecutionException {   
  36.   
  37.   System.out.println(context.getTrigger().getName());   
  38.   
  39.   try {   
  40.   
  41.   File file = new File(”D:/test.txt”);   
  42.   
  43.   if (file.canExecute()) {   
  44.   
  45.   FileWriter writer = new FileWriter(”C:/test.txt”);// 写入C盘文件   
  46.   
  47.   FileReader reader = new FileReader(”D:/test.txt”);// 读取D盘文件   
  48.   
  49.   writer.write(reader.read());   
  50.   
  51.   System.out.println(”写入成功”);   
  52.   
  53.   } else {   
  54.   
  55.   System.out.println(”文件不存在”);   
  56.   
  57.   }   
  58.   
  59.   } catch (IOException e) {   
  60.   
  61.   e.printStackTrace();   
  62.   
  63.   }   
  64.   
  65.   }   
  66.   
  67.   }   
  68.   
  69.   SimpleTirggerRunner.java   
  70.   
  71.   package cn.javaoop.dream.quartz;   
  72.   
  73.   import java.util.Date;   
  74.   
  75.   import org.quartz.JobDetail;   
  76.   
  77.   import org.quartz.Scheduler;   
  78.   
  79.   import org.quartz.SchedulerException;   
  80.   
  81.   import org.quartz.SchedulerFactory;   
  82.   
  83.   import org.quartz.SimpleTrigger;   
  84.   
  85.   import org.quartz.impl.StdSchedulerFactory;   
  86.   
  87.   /**  
  88.  
  89.   * 每隔10秒钟检查D盘有无test.txt,如果有则复制到C盘,共执行10次  
  90.  
  91.   *  
  92.  
  93.   * @author JavaChaos  
  94.  
  95.   *  
  96.  
  97.   */  
  98.   
  99.   public class SimpleTirggerRunner {   
  100.   
  101.   public void task() throws SchedulerException {   
  102.   
  103.   // 初始化调度器工厂   
  104.   
  105.   SchedulerFactory schedulerFactory = new StdSchedulerFactory();   
  106.   
  107.   // 初始化一个调度器   
  108.   
  109.   Scheduler scheduler = schedulerFactory.getScheduler();   
  110.   
  111.   // 当前系统时间   
  112.   
  113.   long systemTime = System.currentTimeMillis();   
  114.   
  115.   // JobDetail对象可以认为需要调度得任务   
  116.   
  117.   JobDetail jobDetail = new JobDetail(”jobDetail-s1″,   
  118.   
  119.   ”jobDetailGroup-s1″, SimpleQuartzJob.class);   
  120.   
  121.   // SimpleTrigger对象设置执行的具体事项   
  122.   
  123.   SimpleTrigger simpleTrigger = new SimpleTrigger(”simpleTrigger”,   
  124.   
  125.   ”simpleTriggerGroup”);   
  126.   
  127.   // 设置启动时间   
  128.   
  129.   simpleTrigger.setStartTime(new Date(systemTime));   
  130.   
  131.   // 设置运行时间间隔,1000毫秒为1秒    
  132.   
  133.     
  134.   
  135. simpleTrigger.setRepeatInterval(10000);   
  136.   
  137.   // 设置运行次数   
  138.   
  139.   simpleTrigger.setRepeatCount(10);   
  140.   
  141.   // 传入参数   
  142.   
  143.   scheduler.scheduleJob(jobDetail, simpleTrigger);   
  144.   
  145.   // 启动调度   
  146.   
  147.   scheduler.start();   
  148.   
  149.   }   
  150.   
  151.   public static void main(String[] args) {   
  152.   
  153.   try {   
  154.   
  155.   SimpleTirggerRunner runner = new SimpleTirggerRunner();   
  156.   
  157.   runner.task();   
  158.   
  159.   } catch (SchedulerException e) {   
  160.   
  161.   e.printStackTrace();   
  162.   
  163.   }   
  164.   
  165.   }   
  166.   
  167.   }  
SimpleQuartzJob.java

  package cn.javaoop.dream.quartz;

  import java.io.File;

  import java.io.FileReader;

  import java.io.FileWriter;

  import java.io.IOException;

  import org.quartz.Job;

  import org.quartz.JobExecutionContext;

  import org.quartz.JobExecutionException;

  /**

  * 读取D盘文件将其内容写入C盘文件中

  * @author JavaChaos

  *

  */

  public class SimpleQuartzJob implements Job {

  @Override

  public void execute(JobExecutionContext context)

  throws JobExecutionException {

  System.out.println(context.getTrigger().getName());

  try {

  File file = new File(”D:/test.txt”);

  if (file.canExecute()) {

  FileWriter writer = new FileWriter(”C:/test.txt”);// 写入C盘文件

  FileReader reader = new FileReader(”D:/test.txt”);// 读取D盘文件

  writer.write(reader.read());

  System.out.println(”写入成功”);

  } else {

  System.out.println(”文件不存在”);

  }

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  SimpleTirggerRunner.java

  package cn.javaoop.dream.quartz;

  import java.util.Date;

  import org.quartz.JobDetail;

  import org.quartz.Scheduler;

  import org.quartz.SchedulerException;

  import org.quartz.SchedulerFactory;

  import org.quartz.SimpleTrigger;

  import org.quartz.impl.StdSchedulerFactory;

  /**

  * 每隔10秒钟检查D盘有无test.txt,如果有则复制到C盘,共执行10次

  *

  * @author JavaChaos

  *

  */

  public class SimpleTirggerRunner {

  public void task() throws SchedulerException {

  // 初始化调度器工厂

  SchedulerFactory schedulerFactory = new StdSchedulerFactory();

  // 初始化一个调度器

  Scheduler scheduler = schedulerFactory.getScheduler();

  // 当前系统时间

  long systemTime = System.currentTimeMillis();

  // JobDetail对象可以认为需要调度得任务

  JobDetail jobDetail = new JobDetail(”jobDetail-s1″,

  ”jobDetailGroup-s1″, SimpleQuartzJob.class);

  // SimpleTrigger对象设置执行的具体事项

  SimpleTrigger simpleTrigger = new SimpleTrigger(”simpleTrigger”,

  ”simpleTriggerGroup”);

  // 设置启动时间

  simpleTrigger.setStartTime(new Date(systemTime));

  // 设置运行时间间隔,1000毫秒为1秒 

 

simpleTrigger.setRepeatInterval(10000);

  // 设置运行次数

  simpleTrigger.setRepeatCount(10);

  // 传入参数

  scheduler.scheduleJob(jobDetail, simpleTrigger);

  // 启动调度

  scheduler.start();

  }

  public static void main(String[] args) {

  try {

  SimpleTirggerRunner runner = new SimpleTirggerRunner();

  runner.task();

  } catch (SchedulerException e) {

  e.printStackTrace();

  }

  }

  }

 

  在这个例子我利用Quartz实现每隔10秒到指定目录下查找某个文件是否存在,如果存在就复制到指定得目录下这一个简单得功能,其实原理和图书到期通知是一样的。

  或许能看出这个例子有一点不好之处就是我指定了具体执行得次数,这样很不方便。如果从这个例子来看很难实现每个星期一得下午一点来进行通知管理员这样的功能。

  下次会介绍一种表达式,这种表达式可以指定具体运行得时间、周期等等。功能很强大,能够满足我们来做一个图书到期这个功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值