1.版本介绍 jdk 1.8 spring 4.1.1.RELEASE quartz 2.2.1
注意版本别冲突,否则项目启动时会报错 ,spring 3.0 以前的推荐quartz 1.8.5
2.pom.xml中添加依赖,需要的两个依赖分别是spring-context-support和quartz
http://www.mvnrepository.com/artifact/org.springframework/spring-context-support/4.1.1.RELEASE
http://www.mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.2.1
下面是所需要的依赖,如果依赖不能导入项目的话,可以访问上面的网址去下载对应的jar包,放到WEB-INF/lib下
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.1.1</version> </dependency>
3.web.xml添加spring文件监听器, 建议配置写到spring-quartz.xml中 ,否则会导致项目启动后 ,定时器同一时间会执行相同的任务两次
研究下来发现quartz确实会加载两次:
第一次:web容器启动的时候,读取applicationContext.xml文件时,会加载一次。
第二次:Spring本身会加载applicationContext.xml一次。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml,classpath:spring-quartz.xml</param-value> </context-param>
4.创建JobTask .java文件
package com.cars.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JobTask { /** Logger */ private static final Logger logger = LoggerFactory.getLogger(JobTask.class); /** * 业务逻辑处理 */ int i = 0; public void executeJob() { logger.info("定时任务"+i+"进行中......."); i++; } }
5.编写spring-quartz.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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean name="JobTask" class="com.cars.utils.JobTask"/> <bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="JobTask" /> <!-- 对应你要执行的方法类 --> <property name="targetMethod" value="executeJob" /> <!-- 对应你要执行的方法 --> <property name="concurrent" value="false"/> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="myJobDetail" /> <!-- 你要调度的任务,即上面的bean id=myJobDetail --> <!-- <property name="cronExpression" value="0 0 0 * * ?" /> --> <!-- 调度的时间设置,我这里是凌晨12点 --> <property name="cronExpression" value="*/5 * * * * ?" /> <!-- 调度的时间设置,我这里是5秒一次 --> </bean> <!-- 将调度和触发器整合 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger"/> </list> </property> </bean> </beans>