quartz笔记

首先网络上的很多教程经常有错(信息过载了),其主要原因是版本发生了变化,例如quartz1和2之间还是有不少差别的,导致查找资料的人浪费了不少时间。所以无论教程如何写,都建议读者首先学习官网的教程,如果有一些资料官网没有,例如扩展的东西或者和其他框架整合的东西,再去参考其他资料。

本文仅为我个人学习记录。建议重点参考官网:www.quartz-scheduler.org

quartz版本:2.2.1

原生quartz:

基本思路:

  通过工厂创建一个Scheduler

  创建一个实现Job接口的实现类(就是要具体做的事情,可以具体调用自己写的service)

  定义一个Job,并绑定我们自己实现Job接口的实现类(例如通过JobBuilder的方式)

  创建Trigger,并设置相关参数,如启动时间等。

  将job和trigger绑定到scheduler对象上,并启动

简易案例:

import java.io.File;
import java.io.IOException;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloWorld implements Job {
    public void execute(JobExecutionContext context)
        throws JobExecutionException {

        File file2 = new File("*****/test/HelloJob1.java");
        if (file2.exists()) {
            System.out.println("存在文件夹或者文件");
        } else {
            try {
                file2.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }  

    }

}
//注意以下几个导入很重要import static org.quartz.DateBuilder.evenMinuteDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class TestQuartz {

    public static void main(String[] args) throws Exception {
        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        // computer a time that is on the next round minute
        Date runTime = evenMinuteDate(new Date());

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

        // Trigger the job to run on the next round minute
        Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

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

        // Start up the scheduler (nothing can actually run until the
        // scheduler has been started)
        sched.start();

        // wait long enough so that the scheduler as an opportunity to
        // run the job!
        try {
            Thread.sleep(600);
            // executing...
        } catch (Exception e) {
            //
        }
    }

}

OK,一个简单的应用就搞定了

其他关键点(我们可以参考下自己手机上闹钟都有哪些设置)

设定开始和结束时间:

quartz提供了一个DataBuilder类,该类中有很多的方法,例如nextGivenSecondDate(Date date, int secondBase),基本通过这个方法可以定义到日历中的任何时间点

具体还有哪些方法,可以通过API查看:http://www.quartz-scheduler.org/api/2.2.1/index.html

再通过如下方法设置startAt和endAt,基本上就能实现开始和结束时间

Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();这里的runTime我们可以定义为指定时间

Trigger trigger = newTrigger().withIdentity("trigger1", "group1").endAt(runTime).build();

设定重复次数

SimpleScheduleBuilder类中有一个静态方法simpleSchedule(),通过它创建SimpleScheduleBuilder对象,该对象可以设置重复次数和重复时间点,具体可以看API,以下是举例

import static org.quartz.SimpleScheduleBuilder.*;

trigger = newTrigger().withIdentity("trigger2", "group1").startAt(runTime).withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();//每十秒重复一次,重复10次,总计执行11次

还有一些其他案例,例如:

trigger = newTrigger().withIdentity("trigger6", "group1").startAt(startTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();//每40秒重复一次,一直重复下去,设定86400秒不就是每天固定时间执行一次了吗?

其实可选择的方案特别多,包括在某个时间段触发、每个月某日固定时间触发等等,官网上的example基本都有对应的方案,我就不在此穷举了,官网全量包中有,如下是2.2.3的下载地址:http://d2zwv9pap9ylyd.cloudfront.net/quartz-2.2.3-distribution.tar.gz

spring和quartz整合

建议参考:http://blog.csdn.net/defonds/article/details/49496895

时间: 2025-01-02 04:42:03

quartz笔记的相关文章

[Quartz笔记]玩转定时调度

简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告警 场景2:监听事务 场景3:定时作业 Quartz的安装 安装 1.可以直接在官网:http://www.quartz-scheduler.org/ 下载jar包. 2.如果使用maven,可以在pom.xml中添加以下依赖jar包: <dependency> <groupId>or

Quartz笔记(一)

 什么是Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联.简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法:     public void execute(JobExecutionContext context) throws JobExecutionExceptio

Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介

转自:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介 Quartz.NET 2.0 学习笔记(2) :和1.0的几点不同 Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度 Quartz.NET 2.0 学习笔记(4) :c

Quartz学习笔记

什么是job schedule system? job schedule system是负责在预定义的时间执行或者通知某个应用组件的系统.举个例子来说,比如在每周一早上9:30发送email通知客户最新的业务情况. java.util.Timer和java.util.TimerTask Timer和TimerTask是可以完成job schedule的两个jdk提供的类,不过这不能称为一个system.Timer和TimerTask是很简单的,不直接支持持久化任务,线程池和类似日历(calend

Quartz.net 2.x 学习笔记03-使用反射加载定时任务

将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuGet管理器控制台执行命令更新log4net,PM> update-package log4net 接着在解决方案中添加一个类库Library项目 类库项目也添加对Quartz.net的引用 下面可以编写代码了,在Library类库中添加一个JobBase类,3个Job类,和一个Job管理类(假设分别

Quartz.Net学习笔记(2)-简介

一.Quartz.Net是什么 1.来源 Quartz.Net是一个开源的作业调度框架: 2.下载地址 官网地址:http://www.quartz-scheduler.net/documentation/index.html 源码地址:https://sourceforge.net/projects/quartznet/ 二.Quartz.Net能干什么 定时轮询数据库同步,定时邮件通知 三.Quartz.Net中的设计模式 1.Builder模式 所有关键组件都由Builder模式来构建<B

QuartZ .Net 学习笔记一: 源码下载与查看

最近因为工作需要研究一下QuartZ .net , 之前也用过不过但没有深入了解,  现想深入研究一下 网上相关QuartZ .net 的文章不少, 但大部分都是源于张善友的博客http://www.cnblogs.com/shanyou/category/102991.html. 写的很全面,看了之后受益匪浅. 在这里将学习的一些收获记录一下, 方便将来查看 Quartz.net 是Quartz的移植版本, 历史来源不做过多介绍 网上几乎所有相关介绍都是写到http://quartznet.s

Quartz.NET笔记(三) More About Jobs &amp; JobDetails

如你所见,Job相当容易实现.这里只是介绍有关Jobs本质, IJob接口的Execute(..)方法以及JobDetails中需要理解的内容. 在所实现的类成为真正的“Job”时,期望任务所具有的各种属性需要通知给Quartz.通过JobDetail类可以完成这个工作,这个类在前面的章节中曾简短提及过.现在,我们花一些时间来讨论Quartz中Jobs的本质和Job实例的生命周期.首先让我们回顾一下第一课中所看到的代码片断: Using Quartz.NET 1 // define the jo

Quartz.NET笔记(一) 概述

配置 有三种配置方式: 1.编码方式: scheduler factory提供的NameValueCollection参数 2.使用标准的 youapp.exe.config配置文件中的quartz-element 3.应用程序根目录中的quartz.config配置文件 注意:VS中要将配置文件设置为“Copy always” 一个简单的例子: Program.cs 1 using System; 2 using System.Threading; 3 4 using Quartz; 5 us