tutorial quartz example ejemplo annotation java spring quartz-scheduler

java - ejemplo - spring quartz annotation example



Spring 3+Quartz 2 error (4)

Recibí el siguiente error cuando uso Spring 3 con Quartz 2. ¿Alguien sabe el motivo?

Error:

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)

Archivo de configuración de primavera:

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


De acuerdo con el static.springsource.org/spring/docs/3.1.0.RC1/changelog.txt , Spring 3.1 tiene soporte para Quartz 2.x.

Para cada {Type}TriggerBean ahora hay un {Type}TriggerBeanFactory que se puede usar para configurar disparadores. En su caso, esto sería SimpleTriggerFactoryBean

Extracto

NOTA: Este FactoryBean funciona tanto con Quartz 1.x como con Quartz 2.0 / 2.1, en contraste con la antigua clase SimpleTriggerBean.

Nota al margen

Es posible que también deba agregar la dependencia org.springframework.transaction, dependiendo del tipo de activador que esté utilizando:

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

Lo necesitábamos para la migración a Quartz 2 en una configuración que utiliza los activadores CronTriggerFactoryBean .


La última vez que lo verifiqué, Spring no tiene soporte para Quartz 2. O bien, eche un vistazo para ver si las compilaciones Spring más recientes han agregado dicho soporte, o intente cambiar a Quartz 1.8.x.


Si está utilizando Spring 3.x & Quartz 2.1.x…

Luego haga solo dos cambios EN SU archivo de configuración 1: para Trigger simple

Use class=”org.springframework.scheduling.quartz.SimpleTriggerFactoryBean”> lugar de class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>

Segundo: para Cron Trigger use class=”org.springframework.scheduling.quartz.CronTriggerFactoryBean” lugar de class=”org.springframework.scheduling.quartz.CronTriggerBean”


Si usa la primavera 3.1,

Reemplace el SimpleTriggerBean con SimpleTriggerFactoryBean

En la versión 3.1, Spring ha creado las clases de Factory para crontrigger y simpletrigger

Actualizar:

Usar Spring 3.2.2, debe ser útil para cambiar también JobDetailBean => JobDetailFactoryBean y CronTriggerBean => CronTriggerFactoryBean.

Crédito a Osy (vote por el comentario abajo)