Quartz是功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中。

Quartz可用于创建简单或复杂的计划,以执行数十、数百甚至数万个作业,它将任务定义为标准的Java组件。

项目部署

项目至少需要Quartz核心库quartz-xyzjar(xyz是版本号),在其类路径。

Quartz几乎没有依赖关系,但至少需要sl4j-api.jar。如果需要将计划数据存储到数据库,则需要c3p0.

如果需要使用内置的作业,可以使用quartz-jobs.jar。

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

实例化并启动调度程序

调度程序由工程创建,但在调用start()方法之前,不会执行任何作业

  // Grab the Scheduler instance from the Factory
  Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

  // and start it off
  scheduler.start();

声明job

定义job

  public class MyJob implements org.quartz.Job {

      public MyJob() {
      }

      public void execute(JobExecutionContext context) throws JobExecutionException {
          System.err.println("Hello World!  MyJob is executing.");
      }
  }

将job加入调度

Quartz提供Fluent API进行DSL定义,首先需要引入相应的类

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.*;

将job加入到调度

  // define the job and tie it to our MyJob class
  JobDetail job = newJob(MyJob.class)
      .withIdentity("job1", "group1")
      .build();

  // Trigger the job to run now, and then repeat every 40 seconds
  Trigger trigger = newTrigger()
      .withIdentity("trigger1", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
              .withIntervalInSeconds(40)
              .repeatForever())
      .build();

  // Tell quartz to schedule the job using our trigger
  scheduler.scheduleJob(job, trigger);

配置文件

Quartz的配置文件quartz.properties

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

results matching ""

    No results matching ""