`
suichangkele
  • 浏览: 200333 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

quartz学习01-环境搭建及简单介绍

阅读更多

写这篇博客的时候是在已经使用了quartz很长之后,我并不是按照从一开始学习的顺序写的,只是记录学了一些我自己的笔记,所以写的很乱,不过读者慢慢看就可以,到最后一定会学的会顺利的吻

先到官网上的quick-start上看看,网址http://www.quartz-scheduler.org/overview/quick-start,先声明一下我的学习笔记是关于quartz2.2.x的,这个和2.1.x是不同的。

 

注意到有个properties file,网站上说这个不是必须的,但是如果要使用的话必须放到classpath下。其实quartz默认已经配置了一个quartz.properties,就在jar包中,先说一下我搭建的学习环境吧,maven的pom如下:

 

<dependencies>
	<dependency>
		<groupId>org.quartz-scheduler</groupId>
		<artifactId>quartz</artifactId>
		<exclusions>
			<exclusion>  <!-- 不懂为啥依赖C3P0 -->
				<groupId>c3p0</groupId>
				<artifactId>c3p0</artifactId>
			</exclusion>
		</exclusions>
		<version>2.2.1</version>
	</dependency>

	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.6.6</version>
	</dependency>
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.12</version>
	</dependency>
</dependencies>

 然后打开maven dependencies-->quartz-2.2.1.jar -->org.quartz,就可以发现有个quartz.properties了。里面的配置以后再说。(别忘了加入一个log4j.properties在classpath下)

官方文档推荐我们使用自己定义的文件,并且指出,优先使用自己定义的文件,如果没有定义的话才会使用quartz自带的配置文件。这个在源码的这个位置:org.quartz.impl.StdSchedulerFactory.initialize(),如果你也仔细读了这个方法就会知道了,我推荐读一读,对你帮助很大很大。

我们暂时先不加入自己定义的quartz.properties,先做个测试,证明我们的环境是正确的。下面的代码来自于官网,其中有一点改动。

 

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import job.HelloJob;

public class Demo1 {

	public static void main(String[] args) throws InterruptedException {
		try {
			SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
			Scheduler sched = schedFact.getScheduler();
			//开始调度器
			sched.start();
			//创建job任务
			JobDetail job = newJob(HelloJob.class).withIdentity("myJob", Scheduler.DEFAULT_GROUP).build();
			//创建trigger,触发器
			Trigger trigger = newTrigger().withIdentity("myTrigger",Scheduler.DEFAULT_GROUP).startNow().withSchedule(simpleSchedule()
					.withIntervalInSeconds(3).repeatForever()).build();
			//将任务和触发器绑定到调度器
			sched.scheduleJob(job, trigger);
                        System.out.println("执行了");			
			Thread.sleep(1000000);//这个一定要加上,不然不会有任何输出,原因在最后有解释
			sched.shutdown();      //关闭调度器
		} catch (SchedulerException se) {
			se.printStackTrace();
		}
	}
}

其中有一些我们平时不常见的写法,比如这里的newJob,newTrigger,都是使用的DSL(Domain-Specific Language) 写法,上面在创建job的时候用到了一个HelloJob.java类,这个类是Job接口的子类,我的代码如下:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {

	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("job   hello job  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
	}
}
 上面的代码的意思是  每个3秒执行一次helloJob的execute方法,我解释一下其中的一些地方:

 

1、newJob,这个是调用的JobBuiler中的静态方法newJob,目的是创建一个JobBuilder,jobBuilder的方法withIdentity的意思是:使用传入的name和group创建一个jobKey来标示一个工作,可以不同指定group的名字,如果不指定则会自动的创建一个,这在源码中得到体现,我看的源码是:org.quartz.JobBuilder.withIdentity(String)和org.quartz.JobBuilder.withIdentity(String, String)。其实我们完全不用调用withIdentity方法,也就是不用创建一个jobKey,我们可以试着将

.withIdentity("myJob", Scheduler.DEFAULT_GROUP)注释掉,然后执行,也是可以的,但是这样程序会自动的创建一个jobKey,我在源码中看到了,源码是:org.quartz.JobBuilder.build(),在这个方法中会检查jobKey是不是空,如果是的话会创建一个

  

2、newTrigger,trigger和上面的一样,但是多了一个withSchuduler方法,这个方法是在这个Trigger中创建一个SchedulerBuilder,这里的simpleSchedule()是调用的org.quartz.SimpleScheduleBuilder.simpleSchedule()这个方法,源码很简单,就是创建了一个SImpleSchedulerBuilder,这个类中有三个属性

    2.1 interval,表示执行的间隔时间,我们通过withIntervalInSeconds方法设置,单位是秒,

    2.2 repeatCount  ,一共执行多少次,如果设置为-1,表示无线多次,repeatForever的源码就是这么做的,

    2.3 misfireInstruction :这个表示如果misfire后的操作,先不管。

  这里我们说的是SimpleSchedulerBuilder,这个类只能做一些简单的定时任务,还有好几个SchudulerBuilder,比如CalendarIntervalScheduleBuilder,CronScheduleBuilder,他们能实现的调度形式更丰富。

在官网上对trigger有如下的说明:

trigger含有一个JobDataMap属性,这个可以用来传送信息,在调用的地方可以通过JobExecutionContext.getTrigger().getJobDataMap()来获得,JobDetail也提供了这个功能。

Quartz提供了两种类型的Tigger,一个是SimpleTigger,一个是CronTrigger。simpleTrigger适用于简单的情况,CronTrigger适用于更复杂的情况,类似于linux中的Crontab指令。

 关于trigger还有一点需要注意的是,无论

3、关于identity,来自于官网的解释:group用于将job和trigger分类,比如“reporting job”,“maintenance jobs”。在一个组内,trigger或者是job的名字必须唯一。如果你多看源码的话就会发现,其实name和group组成了一个新的类,job的叫做JobKey,trigger的叫做  TriggerKey,并且在Trigger中也含有对JobKey的引用,trigger对jobkey引用的设置是在这个方法中: org.quartz.core.QuartzScheduler.scheduleJob(JobDetail, Trigger)。

 

真的写的有点乱。。。。。。。现在对quartz有一个大致的了解了,后面的博客是分成一个个知识点深入讲解的。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    quartz+spring分布式集群调度

    Spring通过提供QuartzJobBean和MethodInvokingJobDetailFactoryBean等类,使得将Quartz作业与Spring Bean相结合变得简单。我们可以将业务逻辑封装在Spring Bean中,然后通过QuartzJobBean来调用这个Bean的方法,实现...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,...通过这个项目,开发者可以深入学习和实践Spring Boot与Quartz的整合,以及分布式环境下的任务调度策略。

    spring+quartz定时小例子

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,...同时,提供的包可以用来快速搭建环境,进行实践操作,加深理解。在实际开发中,这样的定时任务系统可以用于定期备份、清理缓存、发送邮件等后台自动化任务。

    一个更加完善的SignalR服务端,本人已经在实际项目中使用,聊天室接口已经全部定义,只需要实际的实现,同时集成了Quartz

    此外,该服务端还集成了 Quartz,这是一个开源的作业调度框架,用于在.NET环境中执行计划任务。 1. **SignalR 的核心功能**: - **双向通信**:SignalR 提供了实时的双向通信机制,允许服务器主动向客户端发送数据...

    quartz.zip

    综上所述,【quartz.zip】是一个综合性的项目示例,展示了如何在SpringBoot环境中结合MyBatis-Plus进行数据操作,使用Swagger构建API文档,并通过Quartz实现复杂定时任务的调度。开发者可以通过这个项目学习到这些...

    jfinal小木学堂开发环境搭建视频教程源码(jfinal1.9)

    《JFinal小木学堂开发环境搭建视频教程源码解析》 JFinal,作为国内开发者自主设计和开发的一款轻量级Java Web框架,以其简洁、高效的特性深受广大开发者的喜爱。本教程源码基于JFinal 1.9版本,旨在帮助初学者快速...

    springboot环境搭建

    在本教程中,我们将深入探讨如何搭建一个基本的SpringBoot环境并实现一个简单的"Hello, World!"程序。 首先,我们需要安装Java Development Kit (JDK) 1.8。JDK是Java编程的基础,提供了编译、调试和运行Java应用...

    简单的springboot框架的搭建

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建一个独立运行的、生产级别的基于 Spring 的应用。 在搭建 SpringBoot 项目时,首先我们需要了解其核心概念...

    quartz开发指南

    1. **环境搭建**:安装必要的开发工具和库。 2. **创建项目**:使用IDE或命令行工具创建Java项目。 3. **添加依赖**:将Quartz库添加到项目的依赖中。 4. **编写任务**:实现`Job`接口,定义具体的任务逻辑。 5. **...

    ssm框架的搭建那篇博客所用到的jar包等

    这个压缩包提供了一站式的解决方案,帮助开发者快速搭建SSM环境,同时也简化了MyBatis的代码生成过程,降低了学习和使用的门槛。在实际项目中,根据具体需求,可能还需要考虑安全框架(如Spring Security)、任务...

    spring-boot示例项目

    每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路,提高开发效率。 有需要写关于spring boot、spring cloud示例,可以给我提issue哦 ##...

    iOS课程大纲

    #### 第一阶段:编程基础及开发环境搭建 - **目标概述**: - 熟悉Mac操作系统及其基本命令。 - 掌握Xcode开发环境的搭建与简单C语言程序的编写。 - **具体内容**: - **Y01:Mac系统安装与使用** - 学习如何...

    spring-boot学习demo.zip_DEMO_SpringBoot_spring boot_spring-boot_sp

    SpringBoot学习Demo是一个针对初学者的入门项目,旨在帮助开发者快速理解并掌握Spring Boot的核心概念和用法。Spring Boot是Spring框架的一个模块,它简化了创建独立的、生产级别的基于Spring的应用程序的过程,通过...

    Ipad 应用开发实战

    #### 一、基础知识与环境搭建 - **IPad 开发概览** - 了解 iPad 的历史、特点及其操作系统 iOS 的发展历程。 - 掌握从 PC 到 iPad 的过渡知识,包括硬件差异、用户界面设计原则等。 - 学习 iPhone 到 iPad 的...

    springboot-demo,springboot简单案例

    SpringBoot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建一个独立...

    spring-boot-demo.zip

    Maven通过在pom.xml文件中定义依赖关系,使得项目的构建和管理变得简单易行。在这个案例中,pom.xml文件应该包含了Spring Boot starter parent pom,以及其他必要的依赖,如Spring Web、Spring Data JPA、MyBatis等...

    秋招马上开始了,不知道怎么写简历的小伙伴快来这吧,这里有一个简洁而不简单的简历模板简历面试这里是一个狠标准的校招面试简历

    在准备秋季校园招聘的过程中,一份精心制作的简历是至关重要的。...我善于解决问题,乐于与团队合作,期待在新的工作环境中不断成长和提升。我的目标是找到一个能够充分发挥我技术专长并持续学习的平台。

    iOS5开发基础教程

    - 解释iOS开发环境的搭建过程。 - 引导读者完成第一个简单的iOS项目。 - **第三章:处理基本交互**(HandlingBasicInteraction) - 教授如何实现用户界面的基本交互功能。 - 包括按钮点击响应、触摸事件处理等。...

    Beginning.iOS.5.Development

    - **开发环境搭建**:指导读者安装Xcode及其他必要的开发工具。 - **第一个iOS应用**:手把手教读者创建第一个iOS应用,通常是一个简单的“Hello World”应用。 - **用户界面基础**:介绍iOS用户界面的基础组件,如...

Global site tag (gtag.js) - Google Analytics