2009-07-27 23 views
13

Tôi đang triển khai Quartz Job Store trên Oracle DB bằng Spring Framework. Ứng dụng của tôiContext.xml dướiQuartz JobStore với Spring Framework

<bean id="driverJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="BatchFileCollector" /> 
</bean> 

<bean id="ranchTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    <property name="jobDetail" ref="driverJob" /> 
    <property name="startDelay" value="2000" /> 
    <property name="repeatInterval" value="10000" /> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
     <list> 
      <ref bean="ranchTrigger" /> 
     </list> 
    </property> 
    <property name="dataSource"> 
     <ref bean="dataSource.TEXAN"/> 
    </property> 
    <property name="applicationContextSchedulerContextKey"> 
     <value>applicationContext</value> 
    </property> 
    <property name="autoStartup"> 
     <value>true</value> 
    </property> 
    <property name="configLocation" value="classpath:quartz.properties"/> 
</bean> 

Cấu hình này mang lại cho tôi lỗi dưới đây.

Gây ra bởi: org.quartz.JobPersistenceException: Không thể lưu trữ trình kích hoạt: Công việc (DEFAULT.driverJob) được tham chiếu bởi trình kích hoạt không tồn tại. [Xem ngoại lệ lồng nhau: org.quartz.JobPersistenceException: Công việc (DEFAULT.driverJob) được tham chiếu bởi trình kích hoạt không tồn tại.]

Tôi đang sử dụng Spring Framework 2.5.6. Tôi có phải nâng cấp phiên bản Quartz của mình không? Tôi không thể tìm thấy sự cố.

Cảm ơn sự giúp đỡ của bạn.

+0

Xin vui lòng gửi stack trace đầy đủ, không chỉ là văn bản ngoại lệ – skaffman

+0

Bạn có thể đi qua các liên kết sau đây http://jksnu.blogspot.com/2011/03/ quartz-framework-implementation-with.html –

Trả lời

13

SchedulerFactoryBean của bạn cần phải có "driverJob" đăng ký, quá. Cùng với các trình kích hoạt của bạn, hãy thêm danh sách các jobDetails.

<bean id="job.statistics.DailyQPSValidationJobTrigger" class="org.quartz.CronTrigger"> 
    <property name="name" value="DailyQPSValidationTrigger" /> 
    <property name="jobName" value="DailyQPSValidation" /> 
    <property name="jobGroup" value="Statistics" /> 
    <property name="volatility" value="false" /> 
    <!-- Each day, 4 o'clock AM --> 
    <property name="cronExpression" value="0 0 4 * * ?" /> 
</bean> 

<!-- Scheduler --> 

<bean id="job.SchedulerProperties" class="somecompany.someproduct.util.spring.PropertiesFactoryBean" 
    scope="singleton"> 
    <property name="source"> 
     <props> 
      <prop key="org.quartz.scheduler.instanceId">AUTO</prop> 
      <prop key="org.quartz.scheduler.instanceName">JobCluster</prop> 
      <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> 
      <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop> 
      <prop key="org.quartz.jobStore.isClustered">true</prop> 
      <prop key="org.quartz.jobStore.useProperties">false</prop> 
     </props> 
    </property> 
</bean> 

<bean id="job.Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton" 
    lazy-init="false"> 
    <property name="startupDelay" value="30" /> 
    <property name="waitForJobsToCompleteOnShutdown" value="true" /> 
    <property name="dataSource" ref="jdbc.DataSource" /> 
    <property name="quartzProperties" ref="job.SchedulerProperties" /> 
    <property name="jobDetails"> 
     <list> 
      <ref bean="job.statistics.DailyQPSValidationJobDetail" /> 
     </list> 
    </property> 
    <property name="triggers"> 
     <list> 
      <ref bean="job.statistics.DailyQPSValidationJobTrigger" /> 
     </list> 
    </property> 
    <property name="schedulerListeners"> 
     <list> 
      <bean class="somecompany.someproduct.job.SchedulerErrorListener"> 
       <property name="monitoringService" ref="monitoring.MonitoringService" /> 
      </bean> 
     </list> 
    </property> 
    <property name="globalJobListeners"> 
     <list> 
      <bean class="somecompany.someproduct.job.JobErrorListener"> 
       <property name="name" value="JobErrorListener" /> 
       <property name="monitoringService" ref="monitoring.MonitoringService" /> 
      </bean> 
     </list> 
    </property> 
</bean> 
+0

Tôi nghĩ rằng không cần phải thêm driverJob vào SchedulerFactoryBean vì ranchTrigger Bean bao gồm driverJob. Bạn có thể gửi cấu hình mẫu cho Quartz JobStore bằng Spring Framework không? – firstthumb

+0

Bạn có nghĩ rằng hoặc thiên đường bạn đã thử? Chỉ cần thêm công việc vào bộ lập lịch biểu. Và kiểm tra jobClass của bạn "BatchFileCollector". Nó thực sự là một phần của gói Mặc định? Và bạn nên đặt tên cho Job và một nhóm và tham khảo nó từ Trigger ... Tôi sẽ thêm một ví dụ. – cafebabe

0

Tôi không chắc chắn nếu điều này sẽ làm việc, nhưng bạn có thể thử sử dụng:

<bean id="driverJob" .../> 

thay vì:

<bean name="driverJob" .../> 
+0

Nó không hoạt động. Lớp BatchFileCollector mở rộng org.springframework.scheduling.quartz.QuartzJobBean. – firstthumb

3

Tôi có cùng một vấn đề với thạch anh 1.5.2 và 3.0.4 mùa xuân. Vấn đề là lớp JobStoreSupport cố gắng lưu trữ một cron trigger với khóa ngoài cho công việc (cố gắng tải công việc từ db), mà vẫn chưa được duy trì.

Cùng một vấn đề với thạch anh 1.6.1, 1.7.2 phiên bản.

<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 
     depends-on="quartzDatabaseCreator"> 
    <property name="autoStartup"> 
     <value>true</value> 
    </property> 
    <property name="dataSource"> 
     <ref bean="dataSource"/> 
    </property> 
    <property name="quartzProperties"> 
     <props> 
      <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ? 
      </prop> 
      <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.${qrtz.delegateClass} 
      </prop> 
     </props> 
    </property> 
    <property name="triggers"> 
     <list> 
      <ref bean="cronTrigger"/> 
     </list> 
    </property> 
    <property name="schedulerContextAsMap"> 
     <map> 
      <entry key="sygnoServerHelper"><ref bean="sygnoServerHelper"/></entry> 
      <entry key="requestDAO"><ref bean="requestDAO"/></entry> 
      <entry key="alairoCache"><ref bean="alairoCache"/></entry> 
     </map> 
    </property> 
</bean> 

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="checkGracePeriodJob" /> 
    <!--         # s m h dom mon dow [y] --> 
    <property name="cronExpression" value="0 0/5 * * * ?" /> 
</bean> 

<bean id="checkGracePeriodJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="com.synergon.sygnoserver.CheckGracePeriodJob"/> 
</bean> 

+1

Và giải pháp cho vấn đề này là gì? – Abdull

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