Spring3.0不支持Quartz2.0,由于org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError错误:
有两种办法:第一种减少quartz的版本号为,最好是quartz1.8
另外一种是升级spring版本号为Spring3.2以上
注:Spring3.2.4配置文件里使用CronTriggerFactoryBean来集成quartz2.x,
使用CronTriggerBean来集成quartz1.8.x及曾经版本号.
下面是一个小样例demo
<!-- 启动触发器的配置開始 -->
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myJobTrigger" />
</list>
</property>
</bean>
<!-- 启动触发器的配置结束 -->
<!-- 调度的配置開始 -->
<!--
quartz-1.8曾经的配置
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
-->
<!-- quartz-2.x的配置 -->
<bean id="myJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="myJobDetail" />
</property>
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
<!-- 调度的配置结束 -->
<!-- job的配置開始 -->
<bean id="myJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myJob" />
</property>
<property name="targetMethod">
<value>work</value>
</property>
</bean>
<!-- job的配置结束 -->
<!-- 工作的bean -->
<bean id="myJob" class="com.tgb.lk.demo.quartz.MyJob" />
package com.demo.test;
import java.util.Date;
/*
* 使用spring+Quartz运行任务调度的详细类
* */
public class MyJob {
/*
* Description:详细工作的方法,此方法仅仅是向控制台输出当前时间,
* 输入的日志在:%tomcatRoot%\logs\tomcat7-stdout.yyyy-MM-dd.log中,
* 当中,yyyy-MM-dd为部署的日期,经试验发现默认情况下并非每天都生成一个stdout的日志文件
* @return 返回void
* */
public void work()
{
System.out.println("当前时间:"+new Date().toString());
}
}//End of MyJob