Я получил указанную ниже ошибку, когда использую Spring 3 с Quartz 2. Кто-нибудь знает причину?
Ошибка:
Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.scheduling.quartz.JobDetailBean] for bean with name 'job' defined in class path resource [beans.xml]: problem with class file or dependent class; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.JobDetailBean has interface org.quartz.JobDetail as super class
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
Файл конфигурации Spring:
<bean name="job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="Example.ExampleJob"/>
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="5"/>
</map>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="job"/>
<property name="startDelay" value="1000"/>
<property name="repeatInterval" value="5000"/>
</bean>
public class ExampleJob extends QuartzJobBean {
private int timeout;
/**
* Setter called after the ExampleJob is instantiated
* with the value from the JobDetailBean (5)
*/
public void setTimeout(int timeout) {
this.timeout = timeout;
}
@Override
protected void executeInternal(JobExecutionContext ctx)
throws JobExecutionException {
*****
}
}
В последний раз, когда я проверял, Spring не поддерживает Quartz 2. Либо посмотрите, добавили ли последние версии Spring упомянутую поддержку, либо попробуйте понизить версию до Quartz 1.8.x.
Согласно журналу изменений 3.1.0.RC1 , Spring 3.1 поддерживает Quartz 2.x.
Для каждого {Type}TriggerBean
теперь есть {Type}TriggerBeanFactory
, который можно использовать для настройки триггеров. В вашем случае это будет SimpleTriggerFactoryBean
Выдержка
ПРИМЕЧАНИЕ: Этот FactoryBean работает против обоих Кварц 1.x и Кварц 2.0 / 2.1, в отличие от более старого класса SimpleTriggerBean.
Sidenote
Вам также может понадобиться добавить зависимость org.springframework.transaction в зависимости от того, какой тип триггера вы используете:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
Он нам понадобился для перехода на Quartz 2 в конфигурации с использованием триггеров CronTriggerFactoryBean
.