# 运行一个简单的应用

现在您已经下载并安装了Quartz,是时候启动并运行一个示例应用程序了。以下代码获取调度程序的实例,启动它,然后关闭它:

  import org.quartz.Scheduler;
  import org.quartz.SchedulerException;
  import org.quartz.impl.StdSchedulerFactory;
  import static org.quartz.JobBuilder.*;
  import static org.quartz.TriggerBuilder.*;
  import static org.quartz.SimpleScheduleBuilder.*;

  public class QuartzTest {

      public static void main(String[] args) {

          try {
              //从工厂中获取调度程序实例
              Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

              //并且开启关闭它
              scheduler.start();

              scheduler.shutdown();

          } catch (SchedulerException se) {
              se.printStackTrace();
          }
      }
  }

注意:所有引入的包都来自于刚刚下载的文件,如果提示无法引入,请检查是否正确导入相关文件到项目的根目录下。

解析:使用StdSchedulerFactory.getDefaultScheduler()获取调度程序后,由于生成了活动线程,应用程序不会终止,直到调用scheduler.shutdown()。

如果您尚未设置日志记录,则所有日志都将发送到控制台,您的输出将如下所示:

[INFO] 21 Jan 08:46:27.857 AM main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.0.0-SNAPSHOT created.

[INFO] 21 Jan 08:46:27.859 AM main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.

[INFO] 21 Jan 08:46:27.865 AM main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.0.0) 'Scheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 50 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.


[INFO] 21 Jan 08:46:27.865 AM main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'Scheduler' initialized from default resource file in Quartz package: 'quartz.properties'

[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.0.0

[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
Scheduler Scheduler_$_NON_CLUSTERED started.

[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
Scheduler Scheduler_$_NON_CLUSTERED shutting down.

[INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler]
Scheduler Scheduler_$_NON_CLUSTERED paused.

[INFO] 21 Jan 08:46:27.867 AM main [org.quartz.core.QuartzScheduler]
Scheduler Scheduler_$_NON_CLUSTERED shutdown complete.

要做一些有意思的事情,需要在scheduler.start()scheduler.shutdown()调用之间编写代码。

  //定义作业对象并将它与我们的HelloJob.class绑定
  JobDetail job = newJob(HelloJob.class)
      .withIdentity("job1", "group1")
      .build();

  //触发器触发该作业去运行,且每40秒重复一次
  Trigger trigger = newTrigger()
      .withIdentity("trigger1", "group1")
      .startNow()
            .withSchedule(simpleSchedule()
              .withIntervalInSeconds(40)
              .repeatForever())            
      .build();

  //通知quartz使用我们定义的触发器将该作业并入运行进程
  scheduler.scheduleJob(job, trigger);

在调用scheduler.shutdown()之前,您还需要留出一些时间来触发和执行作业 - 对于这样的简单示例,您可能只需要添加Thread.sleep(60000)调用。

现在去试试吧!

可以将40变为4,这样你将在60秒内每4秒看到控制台输出有关quartz正在运行上述作业的一些输出。

以下是Quartz运行成功后的控制台输出效果:

    [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
    [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.0
    [main] INFO org.quartz.core.QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
    [DefaultQuartzScheduler_Worker-1] INFO org.quartz.examples.example1.HelloJob - Hello World! - Sun Nov 20 14:55:03 CST 2022
    [DefaultQuartzScheduler_Worker-2] INFO org.quartz.examples.example1.HelloJob - Hello World! - Sun Nov 20 14:55:07 CST 2022
    [DefaultQuartzScheduler_Worker-3] INFO org.quartz.examples.example1.HelloJob - Hello World! - Sun Nov 20 14:55:11 CST 2022

微信公众号

QQ交流群
原创网站开发,偏差难以避免。

如若发现错误,诚心感谢反馈。

愿你倾心相念,愿你学有所成。

愿你朝华相顾,愿你前程似锦。