spring+quartz实现定时调度
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实现定时调度相关推荐
- java定时调度main方法_java相关:Spring中实现定时调度的几种方法
java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...
- Spring+Quartz制作定时祝福短信
Spring+Quartz制作定时祝福短信 文章目录 前言 一.我的准备过程 二.配置文件信息 1.applicationContext.xml内容 2.message.properties内容 3. ...
- java quartz timer_Java 定时调度TimerQuartz
目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...
- Spring+Quartz实现定时执行任务的配置
1.要想使用Quartz 必须要引入相关的包:以下是我在项目中gradle中的配置: compile 'org.quartz-scheduler:quartz:2.1.1' 2.Scheduler的配 ...
- Quartz.net 定时调度CronTrigger时间配置格式说明
1. CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...
- Spring Quartz 测试
Spring Quartz 1,Scheduler接口核心的调度工具 2,Job接口定义任务 3,JobDetail接口配置Job的任务详情 4,Trigger(触发器)配置Job什么时候运行 配置好 ...
- java集群调度_集群环境下定时调度的解决方案之Quartz集群
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
- Quartz定时调度
工作中我们经常会用到定时调度,也就是说每隔多久去执行一下某个方法.公司的系统要每天24点定时去抽取his数据库中的数据,所用的框架是Springmvc+mybatis.采用的 Q是uartz(版本2. ...
- Spring+Quartz定时任务调度
Spring+Quartz定时任务调度 2011/5 zqhxuyuan@gmail.com 参考文章: http://www.iteye.com/topic/399980 org.sprin ...
最新文章
- Json 动态获取key 或者获取value
- HTML4 和 HTML5 的10个关键区别
- 开发一个微信小程序贵不贵,需要花费多少钱?
- .net core3.0上传文件出现404_使用FTP代理功能连接空间上传文件(解决改善用户上传慢的问题)...
- python中组合框_PyQt 组合框
- 天天生鲜的用户登录机制和redis的作用
- HDU1999不可摸数-暴力打表
- python周天为一周的开始_周天-和周天相关的内容-阿里云开发者社区
- 装linux服务器进去配置界面,在CentOS 8 Linux上安装和配置SuiteCRM的步骤
- 计算机视觉CV中特征点方法相关函数的学习笔记~
- 推荐一款 ES 集群可视化工具:Cerebro,简单、实用!
- 全球IP地址规则和分配
- linux命令行格式简介
- 按键精灵实现自动刷抖音、快手等app
- 计算机技术能力校本培训总结,教师现代教育技术校本培训总结(2篇)
- Latex的常见错误
- heka 配置 一个go语言实现轻量级logstash 干掉ELK
- wampserver下载以及安装教程
- iOS App技术支持网址(URL)
- linux嵌入式开发位置,RedHat 系列 Linux 安装后,建立嵌入式开发环境
热门文章
- 【原】unity3D ios 退出保存数据
- 一句话讲明白 WebAssembly、微前端等技术背后的核心
- 数据库面试 - 如何设计才可以让系统从未分库分表动态切换到分库分表上?
- 行为设计模式 - 责任链设计模式
- 分布式事物框架TCC-Transaction使用教程
- 2019国内某知名科技公司技术资料
- 【Java】编写Java GUI应用程序,完成从键盘输入矩形的长和宽,求矩形的周长和面积并输出结果的功能...
- C#LeetCode刷题之#169-求众数(Majority Element)
- django 部署_狂野的Django:部署生存的技巧
- mac docker 共享_如何在Docker for Mac中加快共享文件访问