2011-01-25 20 views
7

Estamos construyendo una aplicación alrededor de MongoDB, y tenemos la necesidad de ejecutar periódicamente trabajos tipo Cron. Ya utilicé Quartz para este tipo de cosas cuando los proyectos se basaban en un RDBMS con JDBC.haciendo que el programador de Cuarzo sea persistente sin JDBC

Como ya estamos utilizando MongoDB para nuestro almacén de datos principal en este proyecto, prefiero no introducir un RDBMS simplemente para persistir en los trabajos de Quartz, pero no parece haber ningún tipo de implementación JobStore para MongoDB.

¿Alguien puede recomendar una forma de respaldar el Cuarzo con MongoDB o una alternativa simple al Cuarzo? Mis necesidades son bastante simples (ejecutar varios trabajos Java con algún tipo de configuración, à la cron).

+0

No conozco ningún producto de este tipo, pero nunca antes había oído hablar de Quartz. Dado que hay una interfaz clara [JobStore] (http://www.docjar.com/docs/api/org/quartz/spi/JobStore.html), parece que debería poder usar el controlador MongoDB Java e implementar tal tienda No es tan bueno como "libre y de trabajo", pero no estoy seguro de que vaya a encontrar algo así en este momento. –

+0

La implementación de la interfaz JobStore es opcional para Quartz; solo necesita si (1) se está ejecutando en un entorno en clúster o (2) si utiliza propiedades de trabajo persistentes que deben conservarse entre reinicios de JVM. De lo contrario, simplemente crea una instancia del programador y agrega trabajos en el inicio. –

Respuesta

3

Ejecutamos Quartz con Spring y solo se trata de un archivo XML con los trabajos definidos y expresiones cron.

Declarar un trabajo en primavera:

<bean name="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="concurrent" value="false"/> 
    <property name="targetBeanName" value="myBean"/> 
    <property name="targetMethod" value="myScheduledMethod"/> 
    </bean> 

    <bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="myJob"/> 
    <!-- every 30s --> 
    <property name="cronExpression" value="0/30 * * * * ?"/> 
    </bean> 

cuarzo Cableado:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
     <!-- List of batch jobs to be fed to the scheduler. --> 
     <list> 
     <ref bean="myTrigger"/> 
     </list> 
    </property> 
    </bean> 

Ejecutar con:

import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class App 
{ 
    public static void main(String[] args) throws Exception 
    { 
     new ClassPathXmlApplicationContext("jobs-context.xml"); 
    } 
} 
+0

Esto es más o menos en lo que me decidí. No usamos Spring, así que apunto mis quartz.properties en un archivo quartz-config.xml, como se describe aquí: http://www.openscope.net/2010/02/05/quartz-scheduled-jobs/ Gracias por apuntarme en la dirección correcta. –

+6

Eso solo se está ejecutando incrustado, ¿verdad? Lo cual está bien para ciertos trabajos, pero para los trabajos persistentes, particularmente los no repetitivos, quiere tener una tienda persistente que lo respalde para que pueda llevar a cabo desmontajes, etc. – Eelco

8

me escribió una MongoDB JobStore de cuarzo que se encuentra aquí: https://github.com/mulesoft/quartz-mongodb No es compatible con todo, pero funciona para muchos casos de uso.

+0

Eso es impresionante Dan. Muchas gracias por compartir eso. – Eelco

+0

Esto se ve muy interesante. Gracias. – GreenKiwi

+0

¿Esta implementación admite alarmas recurrentes? ¿Recargará los desencadenadores de db automáticamente y los programará en los reinicios de la aplicación? – Gopinath

Cuestiones relacionadas