spring整合配置quartz定时器任务非常的简单,本项目是基于ssm maven项目的整合,如果你是ssh项目,请下载spring-context-support-4.1.0.RELEASE.jar和quartz-2.2.1.rar相关jar包,导入到lib目录中。
先认识一下quartz定时任务分为简单触发器和任务触发器,前者可以做一些简单的任务处理,后者任务触发器可以做非常复杂的定时任务,比如说2017年3月20日22点每隔5分钟清理一下mysql数据库里面的垃圾数据。
quartz任务触发器需要用到quartz表达式,quartz表达式用于设定任务在什么时候执行,如果不了解可以看quartz表达式简单讲解:http://www.tpyyes.com/a/javaweb/2017/0308/78.html
quartz简单触发器主要用于处理每隔多少分钟,多少天等这样简单的任务,和java中的Timer类的功能一样,如下:http://www.tpyyes.com/a/java/2017/0307/77.html
下面开始spring quartz定时器整合。
1.maven pom.xml导入spring quartz整合jar包,如下。
<!-- quartz定时器jar包 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.1.4.RELEASE</version> </dependency>
2.创建spring-quartz.xml文件,并在web.xml中能够扫描得到spring-quartz.xml文件,如果你只是整合quartz,这一步不需要我提醒了吧。
<!-- 启动spring --> <context-param> <param-name>contextConfigLocation</param-name> <!--你项目下的web.xml文件应该都有类似的代码--> <param-value>classpath:spring/spring*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
3.创建任务处理MyQuartzTask.java类,比如对数据的增删改查等都是可以的,本人随便写了两个方法,一个是简单触发器,一个是任务触发器。
package com.baidu; import java.text.SimpleDateFormat; import java.util.Date; public class MyQuartzTask { //简单触发器运行的任务 public void doSimpleTask(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("doSimpleTask正在运行..."+sdf.format(new Date())); } //cron任务触发器运行的任务 public void doCronTask(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("doCronTask正在运行..."+sdf.format(new Date())); } }
4.在spring-quartz.xml中配置quartz定时器,下面分别是简单触发器和任务触发器的配置,根据自己的项目情况任选一种。
简单触发器配置代码如下:
<?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" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--注入任务处理类bean --> <bean id="quartzTask" class="com.baidu.MyQuartzTask"></bean> <!-- 1.简单触发器任务详细信息bean --> <bean id="myJobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 设置任务执行对象 --> <property name="targetObject" ref="quartzTask"></property> <!-- 设置任务执行对象中对应的执行方法 --> <property name="targetMethod" value="doSimpleTask"></property> <!-- 设置任务是否可并发执行,默认为不并发 --> <property name="concurrent" value="false"></property> </bean> <!-- 2.制定简单触发器 --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 设置任务详细信息 --> <property name="jobDetail" ref="myJobDetail1"></property> <!-- 设置延迟1秒开始执行,自己看情况 --> <property name="startDelay" value="1000"></property> <!-- 设置任务执行间隔,本人设置2秒执行一次 --> <property name="repeatInterval" value="2000"></property> </bean> <!-- 设置触发器调度工厂 --> <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- 触发器调度工厂调度简单触发器 --> <ref bean="simpleTrigger"/> <!--<ref bean=""> 多个触发器可以这样配置--> </list> </property> </bean> </beans>
cron任务触发器配置代码:
<?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" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--注入任务处理类bean --> <bean id="quartzTask" class="com.baidu.MyQuartzTask"></bean> <!-- 2.任务触发器详细信息bean --> <bean id="myJobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 设置任务执行对象 --> <property name="targetObject" ref="quartzTask"></property> <!-- 设置任务执行对象中对应的执行方法 --> <property name="targetMethod" value="doCronTask"></property> <!-- 设置任务是否可并发执行,默认为不并发 --> <property name="concurrent" value="false"></property> </bean> <!-- 2.任务触发器 --> <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- 设置任务详细信息 --> <property name="jobDetail" ref="myJobDetail2"></property> <!-- 设置quartz任务执行表达式 ,每隔三秒执行一次任务--> <property name="cronExpression" value="0/3 * * * * ?"></property> </bean> <!-- 设置触发器调度工厂 --> <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!-- 触发器调度工厂调度简单触发器 --> <ref bean="cronTrigger2"/> <!--<rel bean=""> 多个触发器可以这样配置--> </list> </property> </bean> </beans>