报错内容如下:scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class。spring的版本为3.1.1,quartz的版本为2.2.1。要是spring的版本为3.1以下,quartz的兼容版本是1.x。
解决方案:
将CronTriggerBean修改为CronTriggerFactoryBean。如下所示:
<!-- 配置触发器 -->
<bean id="testQuartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 每天下午14点30运行一次 -->
<property name="jobDetail" ref="job1" />
<property name="cronExpression">
<value>0 30 14 * * ?</value>
</property>
</bean>
注意:
<!-- 配置触发器 -->
<bean id="testQuartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 每天下午14点30运行一次 -->
<property name="jobDetail" ref="job1" />
<property name="cronExpression">
<value>0 30 14 * * ?</value>
</property>
</bean>
由于Quartz 2.x修改了部分API,所以需要修改一下Quartz的配置。大体来说很简单,如下:
1)升级Spring的jar包
2)升级Quartz的jar包
3)修改配置
- 将CronTriggerBean修改为CronTriggerFactoryBean
- 将JobDetailBean修改为JobDetailFactoryBean
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 配置作业类 -->
<bean id="job1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.cloudpro.cloud.liantong.CloudMachineService" />
</property>
<property name="targetMethod" value="closeAllExpiredCloudMachine" />
<property name="concurrent" value="false"> </property>
</bean>
<!-- 配置触发器 -->
<bean id="testQuartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 每天凌晨12点运行一次 -->
<property name="jobDetail" ref="job1" />
<property name="cronExpression">
<value>0 30 14 * * ?</value>
</property>
</bean>
<!-- 配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="testQuartzJobTrigger" />
</list>
</property>
</bean>
</beans>
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 配置作业类 -->
<bean id="job1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.cloudpro.cloud.liantong.CloudMachineService" />
</property>
<property name="targetMethod" value="closeAllExpiredCloudMachine" />
<property name="concurrent" value="false"> </property>
</bean>
<!-- 配置触发器 -->
<bean id="testQuartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 每天凌晨12点运行一次 -->
<property name="jobDetail" ref="job1" />
<property name="cronExpression">
<value>0 30 14 * * ?</value>
</property>
</bean>
<!-- 配置调度工厂 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="testQuartzJobTrigger" />
</list>
</property>
</bean>
</beans>