我们在项目当中去使用一个Quartz,主要是了解Quartz的一个基本使用方式,Quartz的基本使用方式,首先打开我们的eclipse,使用SpringBoot去整合我们的Quartz,我们就不加Springboot的标记了,项目类型是jar类型,他没有父工程,我们就不用添加父工程的信息了,我们用的maven是3.2.5,他默认的JDK它是1.5的,这里也不影响使用,所以我们也不做JDK的修改了,如果在maven里做JDK的修改,我们还得去导入相应的插件,打开我们的pom文件,那么在pom文件当中呢,先来添加maven的坐标,添加Quartz的坐标<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version>
</dependency>Quartz运行的时候是需要依赖这个jar包的,我们看一下maven dependencies,这块我们导入了3个jar包,一个是quartz的,一个是c3p0的,还有一个是slf4j的,第二步修改pom文件,添加Quartz的坐标,然后接下来我们看一下在项目当中如何去使用Quartz,先看一下讲Quartz的时候我们说过,在这里我们需要关注三个环节,一个是我们的任务,一个是触发器,一个是任务调度,首先我们要有一个任务,但是任务我得去创建一个任务的class,所以我们先来完成一个任务class的编写,这个类的名称叫QuartzDemo,然后现在这个任务需要实现一个接口,这个接口叫什么呢,它是quartz包下的org.quartz.Job那么他在这个接口下他有一个方法,execute,这个就是任务调度需要去调度的方法,/*** 定义任务类*/
public class QuartzDemo implements Job {/*** 任务被触发时所执行的方法*/public void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("Execute...."+new Date());}}这个是Job类,定义任务类,然后这个execute方法,他所表示的含义呢,任务被触发时,所执行的方法,在这个方法里,简单的打印几句话吧,表示这个方法被执行了,然后后面还是加一个时间,这样我们一个任务类就定义好了,接下来我们来写一个测试代码,看一下怎么让我们这个任务类去执行,我叫QuartzMain,包含一个main方法,就按照我们说的三个流程去做了,我们刚才只是创建了任务类,我们只是编写这个任务类,还没有真正的去创建任务对象,在这里我们就要按照流程去做了,比如第一步我们要创建Job对象,那么这个Job是什么含义呢,我们已经说了,就是表示你要做什么事,然后第二步,创建Trigger对象,那么Trigger对象表示的是什么呢,就是在什么时间做,然后第三步,就是我们最后一步了,创建我们的Scheduler对象,那么这个就是无外乎把两个对象整合到一起了,在什么时间做什么事,这个就是我们打算用Quartz的一个基本思路,第一步怎么去创建Job对象,其实对于这个Job对象的创建呢,并不是我们想象的,通过new他就可以了,不是这样的,那我们看怎么创建呢,这里要用到一个JobDetail的一个对象,我们起个名叫Job,然后通过一个JobBuilder的一个对象,有一个静态方法,JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();newJob里面需要一个class类型的参数,那我们这个参数的给定是什么呢,当前Job的class,我们要去创建QuartzDemo这个任务,然后调用newJob下的一个方法build,来构建我们的Job对象,注意我们的Job对象并不是new出来的,而是把任务类的模板给他,通过newJob的一个静态方法,并且返回一个JobDetail的对象,那么这样就完成了第一步的工作,然后接下来我们来看,怎么去创建这个Trigger对象,那么Trigger对象的创建方式呢,我们要用到TriggerBuilder的这样一个对象,Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever()).build();通过newTrigger方法,在这个方法当中呢,他返回TriggerBuilder对象,再去调用withSchedule方法,那么在withSchedule方法当中他需要一个参数,这个参数表示的是什么意思呢,其实Trigger指的是在什么时间做,那么withSchedule里面要的其实就是你给定的一个时间,其实这个就是你Trigger触发的一个时间,那么对于Trigger触发的时间呢,我们又分为两种,一种是简单的Trigger触发时间,还有一种是基于cron表达式,我们来介绍一下这两个,第一个简单的Trigger触发时间,可以用它提供好的方法,来做一些简单的重复工作,通过Quartz提供的一个方法,来完成简单的重复调用,这是他简单Trigger的一个定义,那么QuartzTrigger表示什么意思呢,我们可以按照cron表达式给定触发的时间,这里我们先来看第一种,通过简单的Trigger该怎么去做呢,这里我们就得创建一个对象了,这个对象叫SimpleScheduleBuilderorg.quartz.SimpleScheduleBuilder在这个对象下我们来看一下,他提供了这么多方法,其实一共是12个方法,我们看一下方法的名称,比如第一个,repeatHourlyForever/*** Create a SimpleScheduleBuilder set to repeat forever with a 1 hour interval.* * @return the new SimpleScheduleBuilder*/
public static SimpleScheduleBuilder repeatHourlyForever() {return simpleSchedule().withIntervalInHours(1).repeatForever();
}还有一个需要参数的/*** Create a SimpleScheduleBuilder set to repeat forever with an interval* of the given number of hours.* * @return the new SimpleScheduleBuilder*/
public static SimpleScheduleBuilder repeatHourlyForever(int hours) {return simpleSchedule().withIntervalInHours(hours).repeatForever();
}那么这些方法表示什么意思呢,我们来看第一个repeatHourlyForever,这个方法就是,表示让他每一小时重复一次,每一小时调用一次,永远去做这个事,而第二个方法呢,需要一个int类型的hours,就是你给定一个时间,比如说我给个2,表示两小时去重复一次,并且永远去重复,你看这个参数是一个hours,所以是一个小时的一个整数,你给个2表示两小时重复一次,并且永远重复,下面还有一个/*** Create a SimpleScheduleBuilder set to repeat the given number* of times - 1  with a 1 hour interval.* * <p>Note: Total count = 1 (at start time) + repeat count</p>* * @return the new SimpleScheduleBuilder*/
public static SimpleScheduleBuilder repeatHourlyForTotalCount(int count) {if(count < 1)throw new IllegalArgumentException("Total count of firings must be at least one! Given count: " + count);return simpleSchedule().withIntervalInHours(1).withRepeatCount(count - 1);
}一个int类型的count,这个参数表示什么意思呢,做几次,比如这块我给一个5,表示每小时去执行一次,一共做5次,每小时做一次,其实就是等于,调用了一次,重复了4次,这里给的是执行的总数量,然后下面还有一个,/*** Create a SimpleScheduleBuilder set to repeat the given number* of times - 1  with an interval of the given number of hours.* * <p>Note: Total count = 1 (at start time) + repeat count</p>* * @return the new SimpleScheduleBuilder*/
public static SimpleScheduleBuilder repeatHourlyForTotalCount(int count, int hours) {if(count < 1)throw new IllegalArgumentException("Total count of firings must be at least one! Given count: " + count);return simpleSchedule().withIntervalInHours(hours).withRepeatCount(count - 1);
}需要一个count的参数和hour的参数,表示什么含义呢,第一个还是重复的次数,就是做几次的一个次数,然后后面表示一个小时,每两小时做一次,然后一共做5次,剩下的都一样,minute,seconds,就是小时分钟秒的,比如我先现在调用/*** Create a SimpleScheduleBuilder set to repeat forever with a 1 second interval.* * @return the new SimpleScheduleBuilder*/
public static SimpleScheduleBuilder repeatSecondlyForever() {return simpleSchedule().withIntervalInSeconds(1).repeatForever();
}就是每秒执行一次,后面并且永远执行,不停的重复,这样我们就把一个时间给定了,然后接下来我们还要去调用一个方法,build,在后面去调的,这样我们一个Trigger就定义好了,接下来我们再去看第三步,就是要创建Scheduler对象了,这个Scheduler对象怎么创建呢Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();这个对象是通过StdSchedulerFactory,通过这样的一个工厂对象,然后调用getDefaultScheduler方法,然后返回Scheduler对象,然后这里会有一个异常,我们把它给抛出去,我们接下来要做的事就是通过scheduler对象,将我们已经创建好的Job和Trigger,融合到一起,他有一个方法是scheduleJob,这里需要两个参数,一个是jobDetail,一个trigger,就把job放到里面,这个就是Triggerscheduler.scheduleJob(job, trigger);这里我们三个环节就已经做好了,有的人说挺复杂写起来,其实在这三个环节当中,他的代码是比较固化的,就是不管你做什么样的任务调度,他的代码结构都是这样的,唯独可变的就是,第一个你的Job的class可能会有变化,第二个就是你的触发时间的方式可能会有变化,我们现在用的是简单的Trigger触发,我们待会还要讲cron的触发时间,所以就这两块会有变化,其他的都是模板型的代码,然后第四步就是启动了,启动怎么启动呢,Scheduler去调用它的start方法就可以了scheduler.start();我们来执行一下,来观察控制台,可以看到execute方法已经执行了,并且是每秒执行一次,这个就是Quartz的基本使用流程,然后这里我们使用的是一个简单的Trigger,我们用cron表达式来做,看看这块要怎么去实现,Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();其实就是把SimpleScheduleBuilder.repeatSecondlyForever()给换一下,换成什么呢,CronScheduleBuilder,在这个对象下有一个cronSchedule,叫这样的一个方法,需要一个字符串的参数,其实字符串参数就是我们讲的cron表达式,比如这里我们还是安排两秒去触发一次,怎么给呢,"0/2 * * * * ?",我们还是用6个域的表现形式,我们只要把这个换了就行,其他的都不要动,接下来我们再去运行,以两秒的节奏去触发我们的方法,那以上就是使用cron的表达式,来给定一个触发的一个时间,这个就是Quartz的一个基本使用流程
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>quartz-demo</artifactId><version>0.0.1-SNAPSHOT</version><!-- <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent> --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的启动器 --><!-- <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> --><!-- 添加Scheduled坐标 --><!-- <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency> --><!-- Quartz坐标 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency></dependencies>
</project>
package com.learn.quartz;import java.util.Date;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;/*** 定义任务类*/
public class QuartzDemo implements Job {/*** 任务被触发时所执行的方法*/public void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("Execute...."+new Date());}}
package com.learn.quartz;import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;public class QuartzMain {public static void main(String[] args) throws Exception {// 1.创建Job对象:你要做什么事?JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();/*** 简单的trigger触发时间:通过Quartz提供一个方法来完成简单的重复调用 cron* Trigger:按照Cron的表达式来给定触发的时间*/// 2.创建Trigger对象:在什么时间做?
//      Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever())
//              .build();Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();// 3.创建Scheduler对象:在什么时间做什么事?Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();scheduler.scheduleJob(job, trigger);//启动scheduler.start();}}

Spring Boot定时任务-Quartz基本使用相关推荐

  1. spring -boot定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现

    spring 定时任务 quartz 基于  MethodInvokingJobDetailFactoryBean 实现 依赖包 如下 <dependencies><dependen ...

  2. Spring Boot定时任务-Quartz介绍

    SpringBoot如何整合第三方定时任务框架,SpringBoot整合Quartz定时任务框架,我们主要来了解一下Quartz的一个介绍,以及对于Quartz使用的一个基本思路,我们先来看Quart ...

  3. Spring Boot定时任务-SpringBoot整合Quartz

    如何通过SpringBoot整合Quartz框架,我们首先去创建一个项目,接下来我们需要在pom文件里添加坐标,我们在使用SpringBoot整合Quartz的时候,需要添加哪些坐标呢,我们来看一下, ...

  4. Spring Boot定时任务应用实践

    在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度. 一.Spring定时器 1.cron表达式方式 使用自带的定时 ...

  5. Spring Boot定时任务-Job类对象注入

    如何在我们的任务类当中,去完成其他对象的注入,Job类中注入对象,回到我们的代码当中,这个是我们编写的Job类,比如我们在Job类当中呢,我要使用到我业务下某个类的某个方法,那我们是不是要将我们业务层 ...

  6. 14. Spring Boot定时任务的使用【从零开始学Spring Boot】

    [视频 & 交流平台] à SpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008& ...

  7. Spring Boot集成Quartz动态实现数据库任务

    1. Quartz简介 1.1. 什么是Quartz Quartz是一个开源的任务调度框架.作用是基于定时.定期的策略来执行任务. 它是OpenSymphony开源组织在Job scheduling领 ...

  8. @scheduled注解配置时间_Java开发重写Spring Boot定时任务,支持可动态调整执行时间...

    Spring Boot应该是目前最火的java开源框架了,它简化了我们创建一个web服务的过程,让我们可以在很短时间.基本零配置就可以启动一个web服务. 定时任务在我们平常的业务开发用的非常多,Sp ...

  9. Spring中定时任务Quartz集群配置学习

    Spring中定时任务Quartz集群配置学习 原来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运行,没 ...

最新文章

  1. 《高效程序员的45个习惯》之体会
  2. 双linux grub rescue,Grub Rescue修复方法
  3. 《Java和Android开发实战详解》——1.2节Java基础知识
  4. JustOj 2038: 叶神的字符串
  5. 元素跟随鼠标旋转,未待完续。。。。
  6. JSpider(4):Tasks,EventsVisitors
  7. php中怎么判断输入密码与原密码一致_「每周FPGA案例」电子密码锁设计
  8. 管理感悟:一种人才分类
  9. 关于FbinstTool加入360急救盘见解
  10. 哥德巴赫猜想 php,C++_c++验证哥德巴赫猜想,哥德巴赫猜想是世界近代三大 - phpStudy...
  11. MCU的GPIO输出模式Open Drain Push/Pull的理解
  12. 下行L1/L2控制信道
  13. Java笔记009-数组、排序、查找、多维数组(二维数组)
  14. 【ATcode】怪文書 / Dubious Document(题意)
  15. 关闭 Flink Checkpoint,引发 P3 故障
  16. html语言计算圆周长和面积,纯JSP实现计算圆的面积和周长
  17. “百度首页人物”首期人物:《士兵突击》许三多
  18. 改变中国软件教育,我们正在行动
  19. sis防屏蔽程序_程序员如何写一份更好的简历
  20. 大厂资深Python程序员透露,读完这本书,三个月后薪资可突破15K

热门文章

  1. LayoutInflater类详解
  2. 【抓包工具】Wireshark(详细介绍与TCP三次握手数据分析)
  3. 稳坐视频云行业第一,阿里云将用边缘计算开辟新赛道
  4. 建立基于以太坊的私有网络和智能合约
  5. 十招搞定 MySQL 大规模数据库的性能和伸缩性优化
  6. 【Alpha】Daily Scrum Meeting第八次
  7. UBoot常用命令手册
  8. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?...
  9. [iBoard 电子学堂][第〇卷 电子基础]第二篇 电路图与印刷电路板
  10. 天鹅给癞蛤蟆的回信[转贴]