飞翔飞翔
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 前言

    • 1.起步
  • 第1章 快速入门指南

    • 1.下载和安装
    • 2.配置
    • 3.运行一个简单的应用
  • 第2章 Quartz教程

    • 1.使用Quartz
    • 2.Quartz API、作业和触发器
    • 3.更多关于作业和作业详细信息
    • 4.更多关于触发器
    • 5.简单触发器
    • 6.Cron触发器
    • 7.触发器监听器和作业监听器
    • 8.调度程序监听器
    • 9.作业存储JobStore
    • 10.配置、资源使用和调度器工厂
    • 11.高级(企业)功能
    • 12.Quartz的其他特征
    • 13.专题之Corn触发器教程
  • 第3章 15个官网示例

    • 概览
    • 1.示例1 - 你的第一个Quartz程序
    • 2.示例2 - 简单触发器
    • 3.示例3 - Cron触发器
    • 4.示例4 - 作业状态和参数
    • 5.示例5 - 处理作业失误
    • 6.示例6 - 处理作业异常
    • 7.示例7 - 中断作业
    • 8.示例8 - 日历带来的乐趣
    • 9.示例9 - 作业监听器
    • 10.示例10 - 使用Quartz插件
    • 11.示例11 - 高负载下的Quartz
    • 12.示例12 - 使用RMI的远程作业调度
    • 13.示例13 - 集群化的Quartz
    • 14.示例14 - 触发器优先级
    • 15.示例15 - TC集群化的Quartz

运行一个简单的应用

现在您已经下载并安装了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
上一页
2.配置