Весна 3 + Кварц 2 ошибка - PullRequest
22 голосов
/ 23 ноября 2011

Я получил ошибку ниже, когда использую 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 {
        *****
    }

}

Ответы [ 4 ]

44 голосов
/ 26 марта 2012

Если вы используете Spring 3.1,

Заменить SimpleTriggerBean на SimpleTriggerFactoryBean

В версии 3.1 Spring создал классы Factory для crontrigger и simpletrigger

Обновление:

Используя Spring 3.2.2, должно быть полезно изменить также JobDetailBean => JobDetailFactoryBean и CronTriggerBean => CronTriggerFactoryBean.

Благодарность Osy (проголосуйте за комментарий ниже)

18 голосов
/ 23 ноября 2011

В последний раз, когда я проверял, Spring не поддерживает Quartz 2. Либо посмотрите, добавили ли упомянутые поддержки самые последние сборки Spring, либо попробуйте понизить версию до Quartz 1.8.x.

17 голосов
/ 05 февраля 2013

Согласно журналу изменений 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.

15 голосов
/ 28 июня 2013

Если вы используете Spring 3.x & Quartz 2.1.x…

Затем сделайте только два изменения в вашем конфигурационном файле. 1-й: для простого триггера

Используйте class=”org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”> вместо class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>

2-й: для Cron Trigger используйте class=”org.springframework.scheduling.quartz.CronTriggerFactoryBean” вместо class=”org.springframework.scheduling.quartz.CronTriggerBean”

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...