spring+quartz实现定时调度
来源:互联网 发布:淘宝信用卡可以套现吗 编辑:程序博客网 时间:2024/06/07 20:49
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 实现定时调度
- spring+quartz实现定时调度
- Spring整合Quartz实现定时任务调度
- spring整合quartz实现定时任务调度
- 在spring中用quartz实现定时调度
- Spring整合Quartz实现定时任务调度
- Spring利用Quartz实现定时调度
- Spring整合Quartz实现定时任务调度
- 使用Spring + quartz实现定时任务调度
- spring boot + quartz实现定时程序调度
- Spring整合Quartz实现定时任务调度
- Spring Quartz定时调度
- 如何使用spring 定时调度 【 Spring+Quartz实现定时任务 】
- spring实现自动定时任务调度【Spring Task】【Quartz】
- spring 定时服务调度quartz
- Spring+Quartz定时任务调度
- spring+quartz定时任务调度
- spring定时任务调度quartz
- 大敏捷之我见
- csu 入门题 棋局
- 小知识
- Android源码设计模式(一)-单例模式
- refs/for/ 与refs/heads/
- spring+quartz实现定时调度
- CTSC2017&&APIO2017
- 【Python专题】使用函数
- 程序员会设计后是一种什么样的感觉
- 【LeetCode】576. Out of Boundary Paths
- Thinkphp模板标签if和eq的区别和比较
- LuaJava在Java、Android中的使用
- 在Android Studio中利用gradle来自动编译jni
- java异步计算Future的使用