2011-11-23 20 views
22

Tôi đã nhận được lỗi bên dưới khi tôi sử dụng Spring 3 with Quartz 2. Có ai biết lý do không?Spring 3 + Quartz 2 lỗi

Lỗi:

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) 

mùa xuân cấu hình file:

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

} 
+0

Hãy tạo chủ đề có ý nghĩa – Dariusz

Trả lời

18

ngoái, tôi đã kiểm tra, mùa xuân không có hỗ trợ cho Quartz 2. Hoặc là có một cái nhìn để xem mùa xuân mới nhất xây dựng đã thêm hỗ trợ cho biết hoặc thử hạ cấp xuống Quartz 1.8.x.

+4

Bạn đã đúng. Hỗ trợ Quartz 2 được thêm vào 3.1. Kiểm tra http://static.springsource.org/spring/docs/3.1.0.RC1/changelog.txt – Adi

+0

để biết ... cảm ơn! – stevevls

+1

Tại sao bạn phải hành hạ tôi vì vậy mùa xuân? Tôi thề rằng tôi sẽ làm việc hiệu quả trong việc thực hiện của riêng tôi hơn là sử dụng Spring và chạy vào các vấn đề không có giấy tờ thú vị như thế này. –

43

Nếu bạn sử dụng Spring 3.1,

Thay SimpleTriggerBean với SimpleTriggerFactoryBean

Trong phiên bản 3.1, mùa xuân đã tạo ra lớp Factory cho crontrigger và simpletrigger

Cập nhật:

Using Spring 3.2.2, must be useful to change also JobDetailBean => JobDetailFactoryBean and CronTriggerBean => CronTriggerFactoryBean.

Tín dụng cho Osy (bỏ phiếu cho nhận xét dưới đây)

+0

Thạch anh 2.2.1 và mùa xuân 3.2.4 –

+16

Sử dụng Spring 3.2.2, phải có ích để thay đổi JobDetailBean => JobDetailFactoryBean và CronTriggerBean => CronTriggerFactoryBean. – Osy

+1

Bình chọn cho Osy (Tôi đã bình chọn cho bình luận của anh ấy , nhưng tôi đã hoàn tác bỏ phiếu do nhầm lẫn, và bây giờ tôi không thể "upvote" một lần nữa) Side lưu ý: Trong JobDetailFactoryBean thiết lập độ bền là đúng nếu bạn thấy "Việc thêm vào với không có kích hoạt phải được bền" lỗi – jbbarquero

17

Theo số 3.1.0.RC1 Change Log, mùa xuân 3.1 có hỗ trợ cho thạch anh 2.x.

Đối với mỗi {Type}TriggerBean hiện tại là {Type}TriggerBeanFactory có thể được sử dụng để thiết lập trình kích hoạt. Trong trường hợp của bạn này sẽ là SimpleTriggerFactoryBean

Trích

NOTE: This FactoryBean works against both Quartz 1.x and Quartz 2.0/2.1, in contrast to the older SimpleTriggerBean class.

Sidenote

Bạn cũng có thể cần phải thêm phụ thuộc org.springframework.transaction, tùy thuộc vào loại kích hoạt bạn sử dụng:

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

Chúng tôi cần nó cho r chuyển sang Quartz 2 trong cấu hình bằng cách sử dụng kích hoạt CronTriggerFactoryBean.

14

Nếu bạn đang sử dụng Spring 3.x & Quartz 2.1.x ...

Sau đó làm chỉ có hai thay đổi trong tập tin cấu hình BẠN 1: Kích hoạt cho đơn giản

Sử dụng class=”org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”> thay vì class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>

Thứ hai: cho Trình kích hoạt Cron sử dụng class=”org.springframework.scheduling.quartz.CronTriggerFactoryBean” thay vì class=”org.springframework.scheduling.quartz.CronTriggerBean”

Các vấn đề liên quan