很多时候有一些事情需要交给程序定时自动执行,java项目中使用spring+Quartz的方式实现这个功能的方式很常见,下面说明一下具体配置。
一、工程需要的jar包
1) aopalliance-1.0.jar
2) commons-logging-1.1.1.jar
3) log4j-1.2.11.jar
4) quartz-2.1.7.jar
5) slf4j-api-1.7.3.jar
6) slf4j-log4j12-1.7.3.jar
7) spring-aop-3.2.3.RELEASE.jar
8) spring-beans-3.2.3.RELEASE.jar
9) spring-context-3.2.3.RELEASE.jar
10) spring-context-support-3.2.3.RELEASE.jar
11) spring-core-3.2.3.RELEASE.jar
12) spring-expression-3.2.3.RELEASE.jar
13) spring-tx-3.2.3.RELEASE.jar
14) spring-web-3.2.3.RELEASE.jar
二、工程目录结构
三、配置文件说明
1、 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置spring配置文件加载的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application/application_spring_trigger.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
2、 spring配置文件(application_spring_trigger.xml)
Quartz 2.x修改了部分API,所以需要注意一下Quartz的配置。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean name="taskJob" class="com.spring.trigger.test.SpringTriggerTest" /> <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <!-- 执行定时任务的类 --> <ref bean="taskJob" /> </property> <property name="targetMethod"> <!-- 指定定时任务的具体方法,由哪个方法执行定时任务 --> <value>test</value> </property> </bean> <!-- 配置触发器 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 --> <property name="jobDetail"> <ref bean="methodInvokingJobDetail" /> </property> <!-- 每天的8点到21点每隔1分钟触发,具体说明见附录 --> <property name="cronExpression"> <value>0 * 08-21 * * ?</value> </property> </bean> <!-- 添加触发器 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 程序启起来后,延迟60秒再开始执行 --> <property name="startupDelay" value="60"/> <property name="triggers"> <list> <ref local="cronTrigger" /> </list> </property> </bean> </beans>
四、定时任务执行类(SpringTriggerTest.java)
package com.spring.trigger.test; import java.util.Date; /** * @author Administrator *spring trigger test */ public class SpringTriggerTest { public void test() { Date date=new Date(); String dateStr=date.toLocaleString(); System.out.println("执行定时任务方法!"+dateStr); } }