spring3.2 + quartz 2.2定时任务

spring3.0以后提供自带的定时任务,编写起来很方便。但是在这里我讲解的并不是使用spring提供的定时任务模块,而是使用quartz ,quartz 是一种功能强大的定时工具。spring提供了对quartz的接口。

 

一,准备:

1.下载spring3.2, 下载地址;

2.下载:quartz 2.2.1 , 下载地址:http://www.quartz-scheduler.org/

 

二,项目的目录结构以及所需的jar包如下:

 spring3.2 + quartz 2.2定时任务

1.编写需要定时执行的java类TaskScanner.java

package com.bjsxt.cronjob;

public class TaskScaner {
	
	public void execScanTask(){
		System.out.println("定时任务....");
		
	}

}

 

2.配置spring的bean文件cron_job.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<bean id="taskScaner" class="com.bjsxt.cronjob.TaskScaner">
	</bean>

	<bean id="taskScanerDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="taskScaner" />
		</property>
		<property name="targetMethod">
			<value>execScanTask</value>
		</property>
	</bean>

	<bean id="taskScanerTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="cronExpression">
			<value>0/1 * * * * ?</value><!-- 定时任务执行频率 -->
		</property>
		<property name="jobDetail">
			<ref bean="taskScanerDetail" />
		</property>
	</bean>

	<!-- -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="taskScanerTrigger" />
			</list>
		</property>

	</bean>

</beans>

 

3.编写测试类UserServiceTest.java

package com.bjsxt.service;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiceTest {
	

	public static void main(String[] args) throws Exception {
		String[] configs = {"cron_job.xml"};
		ApplicationContext act = new ClassPathXmlApplicationContext(configs);
	   
	}
	
}

 

problem :

Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class  

解决:

原因是Spring 3.0版本中支持Quartz版本是2.0以下的,在使用最新的Quartz包(>2.0)之后,接口不兼容。

 

解决办法有两种:

1.降低Quartz版本,降到1.X去。

2.升级Spring版本到3.1+,根据Spring的建议,将原来的**TriggerBean替换成**TriggerFactoryBean,例如CronTriggerBean 就可以替换成 CronTriggerFactoryBean。替换之后问题解决。

 

 

 

参考:http://www.oschina.net/question/8676_9032

http://gong1208.iteye.com/blog/1773177

 

你可能感兴趣的:(Spring3)