自学内容网 自学内容网

Quartz入门与Demo搭建

一、Quartz简介

Quartz是OpenSymphony开源组织在Job scheduling领域的一个开源项目,它完全由Java开发,可以用来执行定时
任务。相较于Java自带的java.util.Timer,Quartz增加了很多功能,如持久性作业、丰富的触发器类型等。Quartz可
以集成于任何的Java应用,小到独立的应用,大至电子商务系统,都能够创建简单或复杂的调度,以执行上十、上百,
甚至上万的任务。

二、Quartz的核心组件

1.Scheduler(调度器):
负责整合Job和Trigger,并基于Trigger设定的时间来执行Job。
2.Job(任务):
开发者需要实现的一个接口,其中包含了需要被调度的业务逻辑。
3.JobDetail:
用于定义Job的实例,并为Job实例提供许多属性。每次Scheduler调度执行一个Job的时候,首先会拿到对应的JobDetail,然后创建该Job实例,再去执行Job中的execute()方法的内容。任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。
4.Trigger(触发器):
用于触发执行Job的条件。Trigger定义了一个已经被安排的任务将会在什么时候执行的时间条件。Quartz提供了两种类型的Trigger:SimpleTrigger和CronTrigger。SimpleTrigger主要用于需要重复执行的任务,而CronTrigger则基于Cron表达式,支持更复杂的时间规则。

三、Quartz Demo搭建

以下是一个简单的Quartz Demo,用于演示如何创建一个定时任务。

1.引入Quartz依赖:

如果你使用的是Maven项目,可以在pom.xml文件中添加Quartz的依赖项。例如:

<dependency>  
  <groupId>org.quartz-scheduler</groupId>  
  <artifactId>quartz</artifactId>  
  <version>2.3.2</version>  
</dependency>

2.定义Job类:

创建一个实现Job接口的类,并在其中实现execute()方法。这个方法将包含需要被定时执行的业务逻辑。

import org.quartz.Job;  
import org.quartz.JobExecutionContext;  
import org.quartz.JobExecutionException;  
 
import java.text.SimpleDateFormat;  
import java.util.Date;  
 
public class PrintWordsJob implements Job {  
  @Override  
  public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {  
    String printTime = new SimpleDateFormat("yy-MM-dd HH-mm-ss").format(new Date());  
    System.out.println("PrintWordsJob start at:" + printTime + ", prints: Hello Job-" + new Random().nextInt(100));  
  }  
}

3.创建Scheduler并配置Job和Trigger:

使用SchedulerFactory创建一个Scheduler实例。
使用JobBuilder创建一个JobDetail实例,并与PrintWordsJob类绑定。
使用TriggerBuilder创建一个Trigger实例,并设置触发条件(如每隔1秒执行一次)。
使用Scheduler的scheduleJob方法将JobDetail和Trigger关联起来,并启动Scheduler。

import org.quartz.*;  
import org.quartz.impl.StdSchedulerFactory;  
 
public class MyScheduler {  
  public static void main(String[] args) throws SchedulerException, InterruptedException {  
    // 创建调度器Scheduler  
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();  
    Scheduler scheduler = schedulerFactory.getScheduler();  
 
    // 创建JobDetail实例,并与PrintWordsJob类绑定  
    JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)  
      .withIdentity("job1", "group1")  
      .build();  
 
    // 构建Trigger实例,每隔1秒执行一次  
    Trigger trigger = TriggerBuilder.newTrigger()  
      .withIdentity("trigger1", "triggerGroup1")  
      .startNow() // 立即生效  
      .withSchedule(SimpleScheduleBuilder.simpleSchedule()  
        .withIntervalInSeconds(1) // 每隔1秒执行一次  
        .repeatForever()) // 一直执行  
      .build();  
 
    // 执行  
    scheduler.scheduleJob(jobDetail, trigger);  
    System.out.println("--------scheduler start ! ------------");  
    scheduler.start(); // 启动调度器  
 
    // 让主线程睡眠一段时间,以便观察定时任务的执行  
    Thread.sleep(5000);  
 
    // 关闭调度器  
    scheduler.shutdown();  
    System.out.println("--------scheduler shutdown ! ------------");  
  }  
}

4.运行Demo:

运行MyScheduler类的main方法,观察控制台输出。你应该会看到每隔1秒打印一次"PrintWordsJob start at:… prints: Hello Job-…"的信息。

四、总结

通过以上步骤,已经成功地搭建了一个简单的Quartz Demo,并创建了一个定时任务。Quartz框架提供了强大的任务调度功能,可以满足各种复杂的定时任务需求。在实际应用中,可以根据具体需求配置不同的Job和Trigger,以实现更复杂的业务逻辑。


原文地址:https://blog.csdn.net/m0_63550220/article/details/142690289

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!