web-dev-qa-db-ja.com

Spring 3 + Quartz 2エラー

Quartz 2でSpring 3を使用すると、以下のエラーが表示されます。理由は誰にもわかりますか?

エラー:

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 {
        *****
    }

}
23
user705414

最後に確認したところ、SpringはQuartz 2をサポートしていません。最新のSpringビルドでサポートが追加されているかどうかを確認するか、Quartz 1.8.xにダウングレードしてみてください。

18
stevevls

Spring 3.1を使用している場合、

SimpleTriggerBeanをSimpleTriggerFactoryBeanに置き換えます

3.1リリースでは、SpringはcrontriggerとsimpletriggerのFactoryクラスを作成しました

更新:

Spring 3.2.2を使用すると、JobDetailBean => JobDetailFactoryBeanおよびCronTriggerBean => CronTriggerFactoryBeanも変更するのに役立つはずです。

Osyへのクレジット(以下のコメントに投票)

45
Fuping

.1.0.RC1変更ログ によると、Spring 3.1はQuartz 2.xをサポートしています。

すべてのための {Type}TriggerBeanが存在します{Type}TriggerBeanFactoryトリガーのセットアップに使用できます。あなたの場合、これは SimpleTriggerFactoryBean

抜粋

注:このFactoryBeanは、以前のSimpleTriggerBeanクラスとは対照的に、Quartz 1.xとQuartz 2.0/2.1の両方に対して機能します。

サイドノート

使用しているトリガーのタイプによっては、org.springframework.transaction依存関係を追加する必要がある場合もあります。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

CronTriggerFactoryBean トリガーを使用する構成でQuartz 2に移行するために必要でした。

18
Martin

Spring 3.xおよびQuartz 2.1.xを使用している場合…

次に、構成ファイルで最初に2つの変更のみを行います。シンプルトリガーの場合

使用する class=”org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”> の代わりに class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>

2番目:cronトリガーの場合はclass=”org.springframework.scheduling.quartz.CronTriggerFactoryBean” の代わりに class=”org.springframework.scheduling.quartz.CronTriggerBean”

16
vijay