写这篇博客的时候是在已经使用了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有一个大致的了解了,后面的博客是分成一个个知识点深入讲解的。
相关推荐
Spring通过提供QuartzJobBean和MethodInvokingJobDetailFactoryBean等类,使得将Quartz作业与Spring Bean相结合变得简单。我们可以将业务逻辑封装在Spring Bean中,然后通过QuartzJobBean来调用这个Bean的方法,实现...
【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,...通过这个项目,开发者可以深入学习和实践Spring Boot与Quartz的整合,以及分布式环境下的任务调度策略。
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架,...同时,提供的包可以用来快速搭建环境,进行实践操作,加深理解。在实际开发中,这样的定时任务系统可以用于定期备份、清理缓存、发送邮件等后台自动化任务。
此外,该服务端还集成了 Quartz,这是一个开源的作业调度框架,用于在.NET环境中执行计划任务。 1. **SignalR 的核心功能**: - **双向通信**:SignalR 提供了实时的双向通信机制,允许服务器主动向客户端发送数据...
综上所述,【quartz.zip】是一个综合性的项目示例,展示了如何在SpringBoot环境中结合MyBatis-Plus进行数据操作,使用Swagger构建API文档,并通过Quartz实现复杂定时任务的调度。开发者可以通过这个项目学习到这些...
《JFinal小木学堂开发环境搭建视频教程源码解析》 JFinal,作为国内开发者自主设计和开发的一款轻量级Java Web框架,以其简洁、高效的特性深受广大开发者的喜爱。本教程源码基于JFinal 1.9版本,旨在帮助初学者快速...
在本教程中,我们将深入探讨如何搭建一个基本的SpringBoot环境并实现一个简单的"Hello, World!"程序。 首先,我们需要安装Java Development Kit (JDK) 1.8。JDK是Java编程的基础,提供了编译、调试和运行Java应用...
它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建一个独立运行的、生产级别的基于 Spring 的应用。 在搭建 SpringBoot 项目时,首先我们需要了解其核心概念...
1. **环境搭建**:安装必要的开发工具和库。 2. **创建项目**:使用IDE或命令行工具创建Java项目。 3. **添加依赖**:将Quartz库添加到项目的依赖中。 4. **编写任务**:实现`Job`接口,定义具体的任务逻辑。 5. **...
这个压缩包提供了一站式的解决方案,帮助开发者快速搭建SSM环境,同时也简化了MyBatis的代码生成过程,降低了学习和使用的门槛。在实际项目中,根据具体需求,可能还需要考虑安全框架(如Spring Security)、任务...
每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路,提高开发效率。 有需要写关于spring boot、spring cloud示例,可以给我提issue哦 ##...
#### 第一阶段:编程基础及开发环境搭建 - **目标概述**: - 熟悉Mac操作系统及其基本命令。 - 掌握Xcode开发环境的搭建与简单C语言程序的编写。 - **具体内容**: - **Y01:Mac系统安装与使用** - 学习如何...
SpringBoot学习Demo是一个针对初学者的入门项目,旨在帮助开发者快速理解并掌握Spring Boot的核心概念和用法。Spring Boot是Spring框架的一个模块,它简化了创建独立的、生产级别的基于Spring的应用程序的过程,通过...
#### 一、基础知识与环境搭建 - **IPad 开发概览** - 了解 iPad 的历史、特点及其操作系统 iOS 的发展历程。 - 掌握从 PC 到 iPad 的过渡知识,包括硬件差异、用户界面设计原则等。 - 学习 iPhone 到 iPad 的...
SpringBoot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者能够快速地创建一个独立...
Maven通过在pom.xml文件中定义依赖关系,使得项目的构建和管理变得简单易行。在这个案例中,pom.xml文件应该包含了Spring Boot starter parent pom,以及其他必要的依赖,如Spring Web、Spring Data JPA、MyBatis等...
在准备秋季校园招聘的过程中,一份精心制作的简历是至关重要的。...我善于解决问题,乐于与团队合作,期待在新的工作环境中不断成长和提升。我的目标是找到一个能够充分发挥我技术专长并持续学习的平台。
- 解释iOS开发环境的搭建过程。 - 引导读者完成第一个简单的iOS项目。 - **第三章:处理基本交互**(HandlingBasicInteraction) - 教授如何实现用户界面的基本交互功能。 - 包括按钮点击响应、触摸事件处理等。...
- **开发环境搭建**:指导读者安装Xcode及其他必要的开发工具。 - **第一个iOS应用**:手把手教读者创建第一个iOS应用,通常是一个简单的“Hello World”应用。 - **用户界面基础**:介绍iOS用户界面的基础组件,如...