Ответ 1
Последнее, что я проверил, Spring не поддерживает Quartz 2. Посмотрите, добавили ли последние сборки Spring указанную поддержку, или попробуйте переопределить Quartz 1.8.x.
Я получил ошибку ниже, когда я использую 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.
Если вы используете Spring 3.1,
Замените SimpleTriggerBean на SimpleTriggerFactoryBean
В выпуске 3.1 Spring создал классы Factory для crontrigger и simpletrigger
Update:
Использование Spring 3.2.2, должно быть полезно изменить также JobDetailBean = > JobDetailFactoryBean и CronTriggerBean = > CronTriggerFactoryBean.
Кредит Оси (проголосовать за комментарий ниже)
Согласно 3.1.0.RC1 Журнал изменений, Spring 3.1 имеет поддержку Quartz 2.x.
Для каждого {Type}TriggerBean
теперь существует {Type}TriggerBeanFactory
, который можно использовать для настройки триггеров. В вашем случае это будет SimpleTriggerFactoryBean
Отрывок
ПРИМЕЧАНИЕ.. Этот FactoryBean работает как с Quartz 1.x, так и с Quartz 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
триггеров.
Если вы используете Spring 3.x и Quartz 2.1.x...
Затем сделайте только два изменения В ВАШЕ файле конфигурации 1st: для простого триггера
Используйте class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
вместо
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
2nd: для Cron Trigger
используйте class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
вместо
class="org.springframework.scheduling.quartz.CronTriggerBean"