乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 前言

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

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

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

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