1.Quartz JAR 文件

  1. quartz安装包根目录的lib/目录下有很多的jar包。其中,quartz-xxx.jar(其中xxx是版本号)是最主要的。为了能够使用quartz的任何特性,必须将该jar包放在应用的classpath路径下;
  2. 下载后,解压,然后将quartz-xxx.jar放到你的应用中。
  3. 我主要是在应用服务器的环境中使用quartz,所以一般将quartz jar包放到应用中(.ear或.war)。当然,如果你希望在很多应用中使用quartz,将quartz的jar包放在应用服务器(appserver)的classpath下即可。如果你只是希望在独立的应用中使用quartz,将quartz的jar包和你的应用依赖的其它jar包放在一起即可。
  4. quzrtz依赖一些第三方的库(以jar包的形式),这些库位于quartz安装包的lib目录下。要使用quartz的所有功能,必须将所有的第三方jar包都放到classpath下。如果你开发的是一个独立的quartz应用,建议将所有的jar包都放到classpath下;如果是在应用服务器环境下使用quartz,其中有些包可能已经存在于classpath中了,因此你需要自己选择。

注意:在应用服务器环境下,如果同一个jar文件,存在两个不同的版本,要注意,可能会产生一些奇怪的结果;比如,WebLogic包含了一个J2EE的实现(在weblogic.jar中),该实现与servlet.jar的实现可能不一致。此时,应该从你的应用中排除掉servlet.jar,这样你就知道使用的是哪个类了。

2.属性文件

  1. quartz使用名为quartz.properties的配置文件。刚开始时该配置文件不是必须的,但是为了使用最基本的配置,该文件必须位于classpath下。

如果你准备构建一个使用quartz的web应用(以.war包的形式),你应该将quartz.properties 文件放到WEB-INF/classes目录下。

  1. 配置

这里包含很多内容。quartz是一个配置很灵活的应用。配置quartz最好的方式是,编辑quartz.properties文件,然后放到应用的classpath下。quartz的安装包中包含了一些配置文件的示例,位于example/目录下。我建议你创建自己的quartz.properties文件,而不是简单地从示例中拷贝并删除不需要的部分。这样看起来更整洁,而且你也会了解到quartz的更多功能。
关于quartz配置文件的详细文档,请查阅Quartz配置参考

为了使用quartz,一个基本的quartz.properties配置文件如下所示:

  1. org.quartz.scheduler.instanceName = MyScheduler
  2. org.quartz.threadPool.threadCount = 3
  3. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

由此配置创建的scheduler具有以下特征:

  • org.quartz.scheduler.instanceName - 此调度程序的名称将为“MyScheduler”。
  • org.quartz.threadPool.threadCount - 线程池中有3个线程,这意味着最多可以同时运行3个job。
  • org.quartz.jobStore.class quartz的所有数据,包括job和trigger的配置,都会存储在内存中(而不是数据库里)。如果你想使用quartz的数据库存储功能(校对注:设置成另外一个类),我们建议在使用数据库存储之前,先使用内存存储(RamJobStore)。

3.启动示例应用程序

下载和安装完quartz后,是时候开发一个示例应用,并让它跑起来了。下面的示例代码,获取scheduler实例对象,启动,然后关闭。

  1. import org.quartz.Scheduler;
  2. import org.quartz.SchedulerException;
  3. import org.quartz.impl.StdSchedulerFactory;
  4. import static org.quartz.JobBuilder.*;
  5. import static org.quartz.TriggerBuilder.*;
  6. import static org.quartz.SimpleScheduleBuilder.*;
  7. public class QuartzTest {
  8. public static void main(String[] args) {
  9. try {
  10. // 从工厂中获取Scheduler实例
  11. Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  12. // 启动
  13. scheduler.start();
  14. //关闭
  15. scheduler.shutdown();
  16. } catch (SchedulerException se) {
  17. se.printStackTrace();
  18. }
  19. }
  20. }
  • 当你调用StdSchedulerFactory.getDefaultScheduler()获取scheduler实例对象后,在调用scheduler.shutdown()之前,scheduler不会终止,因为还有活跃的线程在执行。
  • 注意示例代码中的静态导入(static import),下面的代码中也会用到它们。

如果你没有配置日志输出,所有的日志会输出到控制台,比如:
image.png
在start()和shutdown()之间做一些事情:

在调用shutdown()之前,你需要给job的触发和执行预留一些时间,比如,你可以调用Thread.sleep(60000)让线程睡眠一段时间。

现在去找点乐子吧!