spring+quartz实现任务调度在web应用启动时调度工厂就启动,web应用停止时,调度工厂也就停止工作,这种和web应用一致的声明周期很适合来实现任务调度,下面介绍使用方法。

(一)需要的jar包

需要包括两部分的jar包,一部分是quartz需要的jar包,包括:
c3p0-0.9.1.1.jar
log4j-1.2.16.jar
quartz-2.2.3.jar
quartz-jobs-2.2.3.jar
slf4j-api-1.7.7.jar
slf4j-log4j12-1.7.7.jar
因为涉及到了log4j,所以再加上一个日志jar包commons-logging-1.1.3.jar;
另一部分是spring需要的jar包,包括:
spring-beans-4.3.8.RELEASE.jar
spring-context-4.3.8.RELEASE.jar
spring-context-support-4.3.8.RELEASE.jar
spring-core-4.3.8.RELEASE.jar
spring-expression-4.3.8.RELEASE.jar
spring-tx-4.3.8.RELEASE.jar
spring-web-4.3.8.RELEASE.jar
quartz下载点击这里,spring下载点击这里。所需jar包截图如下所示:

(二)定义任务类

任务类可以是任何Java类,可以不用实现任何接口。例如下面是本人定一个名为MyJob的任务类,代码如下:

package controller;public class MyJob {public void myJob(){System.out.println("测试quartz!!!");}
}

(三)配置quartz

在java项目的src目录下新建一个.xml文件,命名为application.xml(文件名可以随便取),然后在里面配置quartz所需要的bean。
1.配置任务类
只需要定义一个bean,bean的class指向是设计的任务类。

2.配置调度任务
在配置调度任务时,需要指定调度的任务对象,也就是前面定义的任务类,是用name为targetObject的property来指定;然后再指定具体执行该类中的哪个方法,是用name为targetMethod的property来指定。还可以为调度任务配置一些其他参数,比如是否允许并发,这些配置是可选的。

3.配置触发器
在quartz中,常用的触发器有两种,分别是simpleTrigger和cronTrigger。simpleTrigger称为频率触发器,是用来指定间隔多久来触发一次调度任务cronTrigger是定时触发器,用来指定某个时间点来触发一次调度任务,具体选择哪个触发器根据实际的需求来定。

simpleTrigger的配置包括,指定调度任务,具体是通过name为jobDetail的property来指定;配置触发器被触发后延迟多久开始执行调度任务,是通过name为startDelay来指定的;配置间隔多久触动触发器,通过name为repeatInterval来指定的;指定重复执行多少次调度任务(即最多能够被触发多少次执行调度任务,到达这个数之后就不再被触发),通过name为repeatCount的property来指定。其中后面几种配置是可选的,配置调度任务时必须得。

cronTrigger的配置包括,指定调度任务,通过name为jobDetail的property来指定;配置定时表达式,即配置什么时间点触发调度任务,通过name为cronExpression的property来指定。cronTrigger时间配置的解析请参考博客。

4.配置调度工厂
quartz调度工厂只能有一个。可以在name为triggers中的标签中添加多个调度任务。这样一启动web应用时就会启动调度工厂,并开始执行工厂中配置的调度任务。

以前面的MyJob类作为调度类为例,配置quartz的文件名为application.xml,则配置文件代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- 定义任务类 --><bean id="myJob" class="controller.MyJob"></bean><!-- 定义调度任务,涉及到的方法 --><bean id="myMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="myJob"/><property name="targetMethod" value="myJob"/><property name="concurrent" value="false"/>    <!-- 配置false,不允许并发执行 --></bean><!-- 定义触发器,这里为定时触发器,还存在一种频率触发器 --><bean id="myCron" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail" ref="myMethod" />        <!-- 触发器需要出发的任务 --><property name="cronExpression" >                  <!-- 触发器的时间触发条件 --><value>0 0 0 * * ?</value>     <!-- 秒 分 时 日 月 星期几 年,每天00:00:00触发 --></property></bean><!--定义频率触发器--><bean id="mySimple" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"><property name="jobDetail" ref="myMethod"/><property name="startDelay">                      <!-- 触发器被触发后,延迟多久执行任务 --><value>0</value>                              <!-- value中单位为ms --></property><property name="repeatInterval">                  <!-- 指明间隔多久触发一次,这里为10秒 --><value>10000</value>                          <!-- value中单位为ms --></property><!--  <property name="repeatCount">                     用于指明重复执行的次数<value>10</value></property>--></bean><!-- 定义quartz调度工厂,调度工厂只能有一个,多个调度任务在list中添加 --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list>    <!-- 用于添加多个调度任务的list --><ref local="mySimple"/></list></property></bean></beans>

(四)配置web.xml

配置完quartz之后,我们需要在启动web应用时加载该配置文件,这样才能实现web启动时调度工厂也被启动。首先在web.xml中配置spring上下文监听器,当遇到需要加载其他xml文件,这个监听器就会调用监听器中的类来加载文件,具体通过配置来实现的;然后再配置需要加载的xml的路径,具体是通过配置来实现的。web.xml文件代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="starter" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><!-- 加载quartz配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/application.xml</param-value></context-param><!--添加上下文监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

程序运行结果如下所示:

spring+quartz实现定时调度相关推荐

  1. java定时调度main方法_java相关:Spring中实现定时调度的几种方法

    java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...

  2. Spring+Quartz制作定时祝福短信

    Spring+Quartz制作定时祝福短信 文章目录 前言 一.我的准备过程 二.配置文件信息 1.applicationContext.xml内容 2.message.properties内容 3. ...

  3. java quartz timer_Java 定时调度TimerQuartz

    目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...

  4. Spring+Quartz实现定时执行任务的配置

    1.要想使用Quartz 必须要引入相关的包:以下是我在项目中gradle中的配置: compile 'org.quartz-scheduler:quartz:2.1.1' 2.Scheduler的配 ...

  5. Quartz.net 定时调度CronTrigger时间配置格式说明

    1.   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  6. Spring Quartz 测试

    Spring Quartz 1,Scheduler接口核心的调度工具 2,Job接口定义任务 3,JobDetail接口配置Job的任务详情 4,Trigger(触发器)配置Job什么时候运行 配置好 ...

  7. java集群调度_集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  8. Quartz定时调度

    工作中我们经常会用到定时调度,也就是说每隔多久去执行一下某个方法.公司的系统要每天24点定时去抽取his数据库中的数据,所用的框架是Springmvc+mybatis.采用的 Q是uartz(版本2. ...

  9. Spring+Quartz定时任务调度

    Spring+Quartz定时任务调度   2011/5 zqhxuyuan@gmail.com 参考文章: http://www.iteye.com/topic/399980 ­ org.sprin ...

最新文章

  1. Json 动态获取key 或者获取value
  2. HTML4 和 HTML5 的10个关键区别
  3. 开发一个微信小程序贵不贵,需要花费多少钱?
  4. .net core3.0上传文件出现404_使用FTP代理功能连接空间上传文件(解决改善用户上传慢的问题)...
  5. python中组合框_PyQt 组合框
  6. 天天生鲜的用户登录机制和redis的作用
  7. HDU1999不可摸数-暴力打表
  8. python周天为一周的开始_周天-和周天相关的内容-阿里云开发者社区
  9. 装linux服务器进去配置界面,在CentOS 8 Linux上安装和配置SuiteCRM的步骤
  10. 计算机视觉CV中特征点方法相关函数的学习笔记~
  11. 推荐一款 ES 集群可视化工具:Cerebro,简单、实用!
  12. 全球IP地址规则和分配
  13. linux命令行格式简介
  14. 按键精灵实现自动刷抖音、快手等app
  15. 计算机技术能力校本培训总结,教师现代教育技术校本培训总结(2篇)
  16. Latex的常见错误
  17. heka 配置 一个go语言实现轻量级logstash 干掉ELK
  18. wampserver下载以及安装教程
  19. iOS App技术支持网址(URL)
  20. linux嵌入式开发位置,RedHat 系列 Linux 安装后,建立嵌入式开发环境

热门文章

  1. 【原】unity3D ios 退出保存数据
  2. 一句话讲明白 WebAssembly、微前端等技术背后的核心
  3. 数据库面试 - 如何设计才可以让系统从未分库分表动态切换到分库分表上?
  4. 行为设计模式 - 责任链设计模式
  5. 分布式事物框架TCC-Transaction使用教程
  6. 2019国内某知名科技公司技术资料
  7. 【Java】编写Java GUI应用程序,完成从键盘输入矩形的长和宽,求矩形的周长和面积并输出结果的功能...
  8. C#LeetCode刷题之#169-求众数(Majority Element)
  9. django 部署_狂野的Django:部署生存的技巧
  10. mac docker 共享_如何在Docker for Mac中加快共享文件访问