quarzt定时调度任务解析

简介

Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子

因为Spring已经整合Quarzt,所以我们只需要配置一下即可。

下载jar包

可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包

可以通过Maven来构建,记得引入Spring所需要的jar

 <!-- 引入quartz对应的依赖 -->
 <dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.2.3</version>
 </dependency>
 <dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz-jobs</artifactId>
  <version>2.2.3</version>
 </dependency>

概念

任务类:即需要定时执行代码的类。

JobDetail:配置任务类的细节,即注入任务类和指定任务类的方法,是一个可执行的工作,它本身可能是有状态的。

触发器(myTrigger):触发器代表一个调度参数的配置,配置调用的时间。

调度工厂(scheduler):是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。

配置方法

首先编写任务类

public class MyJob {
 public void job() {
  System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ": 任务执行");
 }
}

然后再spring配置任务类的bean

<bean id="myJob" class="quarzt.test.MyJob" / >

配置JobDetail,注入任务类和任务类的方法

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
 <!-- 注入目标对象 -->
 <property name="targetObject" ref="myJob"/>
 <!-- 注入目标方法 -->
 <property name="targetMethod" value="job"/>
</bean> 

配置触发器

<!-- 配置触发器 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
 <!-- 注入任务详情对象 -->
 <property name="jobDetail" ref="jobDetail"/>
 <!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
 <property name="cronExpression">
  <value>/5 * * * * ?</value> // 表示每隔五秒执行一次。 corn在下面会有活命
 </property>
</bean>

最后配置调度工厂并且注入配置好的触发器

<!-- 配置调度工厂 -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 <!-- 注入触发器 -->
 <property name="triggers">
  <list>
   <ref bean="myTrigger"/>
  </list>
 </property>
</bean> 

到此就配置完成,可以执行定时任务了。

执行结果

cron表达式

corn用来控制任务的调度时间,在Trigger中配置,下面是corn表达式的基本语法,如果看着太复杂,网上提供了corn语法生成器 http://cron.qqe2.com/ 可以通过指定条件自动生成corn表达式。

下面是七个*所代表的意义

星号:* 代表任意时间,即指示着你想在这个域上包含所有合法的值,

* * * * * * 代表每时每刻都会触发

0 * 17 * * ? : 每天从下午5点到下午5:59中的每分钟激发一次 trigger。它停在下午 5:59 是因为值 17 在小时域上,在下午 6 点时,小时变为 18 了,也就不再理会这个 trigger,直到下一天的下午5点。

问号(?):? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。

0 10,44 14 ? 3 WEB :在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。
逗号(,) : 是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45 在秒域上意味着每15秒触发一个 trigger。

0 0,15,30,45 * * * ? :每刻钟触发一次 trigger。
反斜线(/): (/) 是用于时间表的递增的。我们刚刚用了逗号来表示每15分钟的递增,但是我们也能写成这样 0/15。

0/15 0/30 * * * ? :在整点和半点时每15秒触发 trigger。
中划线(-):中划线 (-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 和 8 点。" 域的值不允许回卷,所以像 50-10 这样的值是不允许的。

0 45 3-8 ? * * ::在上午的3点至上午的8点的45分时触发。
字母(L):L 说明了某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天,当 L 字母用于周域上,指示着周的最后一天,就是星期六 (或者数字7),你可以用一个数字与 L 连起来表示月份的最后一个星期 X。

0 0 8 L * ? :每个月最后一天的上午 8:00 触发

0 59 23 ? * L:每个月的最后一个星期六下午的 11:59 触发

0 0 12 ? * 2L:每个月的最后一个星期一触发(数字与 L 连起来表示月份的最后一个星期 X)

字母(W):平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日

井号(#):# 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。

示例

"0012**?"每天中午12点触发
"01510?**"每天上午10:15触发
"01510**?"每天上午10:15触发
"01510**?*"每天上午10:15触发
"01510**?2005"2005年的每天上午10:15触发
"0*14**?"在每天下午2点到下午2:59期间的每1分钟触发
"00/514**?"在每天下午2点到下午2:55期间的每5分钟触发
"00/514,18**?"在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"00-514**?"在每天下午2点到下午2:05期间的每1分钟触发
"010,4414?3WED"每年三月的星期三的下午2:10和2:44触发
"01510?*MON-FRI"周一至周五的上午10:15触发
"0151015*?"每月15日上午10:15触发
"01510L*?"每月最后一日的上午10:15触发
"01510?*6L"每月的最后一个星期五上午10:15触发
"01510?*6L2002-2005"2002年至2005年的每月的最后一个星期五上午10:15触发
"01510?*6#3"每月的第三个星期五上午10:15触发

总结

以上就是本文关于quarzt定时调度任务的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 基于spring+quartz的分布式定时任务框架实现

    问题背景 我公司是一个快速发展的创业公司,目前有200人,主要业务是旅游和酒店相关的,应用迭代更新周期比较快,因此,开发人员花费了更多的时间去更=跟上迭代的步伐,而缺乏了对整个系统的把控 没有集群之前,公司定时任务的实现方式 在初期应用的访问量并不是那么大,一台服务器完全满足使用,应用中有很多定时任务需要执行 有了集群之后,公司定时任务实现的方式 随着用户的增加,访问量也就随之增加,一台服务器满足不了高并发的要求,因此公司把应用给部署到集群中,前端通过nginx代理(应用服务器ip可能是用防火墙

  • springboot整合quartz实现定时任务示例

    在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. 2.使用spring的定时器: spring自带支持定时器的任务实现.其可通过简单配置来使用到简单的定时任务. @Component @Configurable @EnableScheduling p

  • SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法

    前言 最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能. 下面说一下两种方式在Spring Boot 项目中的使用. Spring Schedule 实现定时任务 Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解. 因为是Spring Boot 项目 可能尽量避免使用XML配置的形式,

  • Spring整合Quartz实现定时任务调度的方法

    最近项目中需要实现定时执行任务,比如定时计算会员的积分.调用第三方接口等,由于项目采用spring框架,所以这里结合spring框架来介绍. 编写作业类 即普通的pojo,如下: package com.pcmall.task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TaskA { private static Logger logger = LoggerFactory.getLogger(Ta

  • 详解Spring整合Quartz实现动态定时任务

    最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先,当然是添加依赖的jar文件,我的项目是maven管理的,以下的我项目的依赖: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring

  • 最流行的java后台框架spring quartz定时任务

    配置quartz 在spring中需要三个jar包: quartz-1.8.5.jar.commons-collections-3.2.1.jar.commons-logging-1.1.jar 首先要配置我们的spring.xml xmlns 多加下面的内容. xmlns:task="http://www.springframework.org/schema/task" 然后xsi:schemaLocation多加下面的内容. http://www.springframework.o

  • springboot整合Quartz实现动态配置定时任务的方法

    前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency

  • quarzt定时调度任务解析

    简介 Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子 因为Spring已经整合Quarzt,所以我们只需要配置一下即可. 下载jar包 可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包 可以通过Maven来构建,记得引入Spring所需要的jar

  • 基于Quartz定时调度任务(详解)

    简介 Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子 因为Spring已经整合Quarzt,所以我们只需要配置一下即可. 下载jar包 1.可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包 2.可以通过Maven来构建,记得引入Spring所需要的

  • Spring中实现定时调度的几种方法

    1,内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式:  定时触发:到某一时间点上执行某些处理操作:  间隔触发:每隔几秒后进行某些操作的自动处理. 所有的处理都依赖于计算机系统底层的时钟发生器,在java最初的实现过程里面,真对于定时处理专门提供有两个类:Timer,TimerTask两个类,其中TimerTask主要是定义任务的执行,相当于启动一个线程去执行某些任务. public class M

  • 深入理解Java定时调度(Timer)机制

    简介 在实现定时调度功能的时候,我们往往会借助于第三方类库来完成,比如: quartz . Spring Schedule 等等.JDK从1.3版本开始,就提供了基于 Timer 的定时调度功能.在 Timer 中,任务的执行是串行的.这种特性在保证了线程安全的情况下,往往带来了一些严重的副作用,比如任务间相互影响.任务执行效率低下等问题.为了解决 Timer 的这些问题,JDK从1.5版本开始,提供了基于 ScheduledExecutorService 的定时调度功能. 本节我们主要分析 T

  • laravel异步监控定时调度器实例详解

    定时调度器是什么 laravel默认提供了一个命令定时任务的功能,在其他的php框架下面,没有这个定时任务,我们要跑一些异步脚本怎么操作呢,只能依赖我们系统提供的crontab来做,这就导致我们每次发版本新增定时任务都要去服务器更改crontab代码,获取更新这个配置. 执行命令是php artisan schedule:run 来执行,那放在哪里执行呢,没错这个调起还是需要依赖我们crontab来执行,但是只需要配置一次,后续所有定时任务都在我们业务代码进行控制 场景 我们有一个导入数据的定时

  • SprinBoot整合Quart实现定时调度的示例代码

    Quartz是一款开源的定时任务调度框架,Quartz的官网是:http://www.quartz-scheduler.org/.本文主要是讲诉使用springboot整合quartz实现定时任务调度管理的用例.主要的内容有如下三部分: 1. springboot整合quartz的相关配置 2. 实现基于simpleTrigger的定时任务 3. 实现基于cronTrigger的定时任务 一.导入相关的pom依赖 <?xml version="1.0" encoding=&quo

  • Python使用定时调度任务的方式

    目录 1.简单循环 Simple loops 2.简单循环但是使用了线程Simple loops but threaded 3.定时调度库 Schedule Library 4.Python Crontab 5.RQ 调度器 RQ Scheduler 6.总结 Conclusion 摘要: 今天构建的大多数应用程序都需要某种方式的调度机制.轮询 API 或数据库.不断检查系统健康状况.将日志存档等是常见的例子. Kubernetes和Apache Mesos等使用自动伸缩扩容技术(Auto-sc

  • React不使用requestIdleCallback实现调度原理解析

    目录 1.起因 2.查找问题 3.解决问题 4.总结 5.吐槽 1.起因 最近在一边啃源码,一边手写fiber嘛,然后也看了很多博客和资料,基本上大伙好像都是说用requestIdleCallback来模拟react实现一个空闲时间调度.但我自己手写的时候把怎么用怎么怪,老是感觉有什么地方不对劲而且是在调度过程中,可能是因为我是想写出来来一个相对健全一点的模版方便我以后写源码的其他部分把,然后分析了一下所以有了这篇博客. 2.查找问题 1.requestIdleCallback是利用帧之间空闲时

  • Linux操作系统定时调度系统Cron深入介绍

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业,本文档不讲cron实现原理,主要讲一下cron的具体使用及简单介绍. 新增调度任务推荐使用crontab -e命令添加自定义的任务(编辑的是/var/spool/cron下对应用户的cron文件),退出后重启crond进程,虽然官方文档描述为"crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.",但我曾经遇到不重启无法运行任务的情况(也许因为某些系统crontab是读到内

  • Django框架 信号调度原理解析

    Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置信号 Model signals pre_init # django的modal执行其构造方法前,自动触发 post_init # django的modal执行其构造方法后,自动触发 pre_save # django的modal对象保存前,自动触发 post_save # django的modal对象保存后,自动触发 pre_delet

随机推荐