2012-08-28 17 views
5

He desarrollado un rastreador web que rastrea con Start URL como parámetro de inicialización. Quiero permitir a los usuarios programar esta tarea en términos de un trabajo si es posible.Programación dinámica de trabajos utilizando Spring 3

Actualmente estoy usando Spring 3.1.2 y Hibernate. Necesito darles a los usuarios una interfaz que reciba los parámetros de cronJob y en función de eso quiero ejecutar el rastreador. ¿Es posible hacerlo usando la primavera?

He leído un poco acerca de Quartz pero los artículos en SO u otros sitios web no están del todo claros o no están completos para comprender completamente cómo implementar un programador en la primavera.

sé lo básico que hay tres componentes a lo

  1. SchedulerFacotry
  2. gatillo
  3. Trabajo (Servicio de ejecución)

espero que alguien me podría orientar en la dirección correcta.

Respuesta

9

El programador de cuarzo es la herramienta adecuada para el trabajo. Por alguna razón, casi todos los tutoriales se centran en la definición de trabajos en el inicio, en XML, mientras que Quartz es completamente capaz de (re | un-) programar trabajos en tiempo de ejecución.

Puede y debe aprovechar la ventaja de Spring para iniciar el programador de Quartz, pero luego puede interactuar con él directamente desde su código. Aquí está un ejemplo sencillo from the documentation:

JobDetail job = newJob(SimpleJob.class) 
    .withIdentity("job1", "group1") 
    .build(); 

CronTrigger trigger = newTrigger() 
    .withIdentity("trigger1", "group1") 
    .withSchedule(cronSchedule("0/20 * * * * ?")) 
    .build(); 

scheduler.scheduleJob(job, trigger); 

Aquí se define un trabajo (pieza de código Java para funcionar), gatillo (cuando para ejecutarlo, el usuario puede suministrar cualquier expresión CRON válida) y se envuelve todo al programarlo. La instancia del programador puede ser inyectada por Spring. Spring también manejará el apagado correcto.

+0

Gracias por su respuesta. pero es posible hacerlo usando 'TimerFactoryBean'' ScheduledTask' provisto por Spring en lugar de usar Quartz ... Al igual que en la documentación, también se menciona este método. has explorado eso? –

+1

'newJob (...)' es en realidad 'JobBuilder.newJob (...)'. En el ejemplo anterior, se supone que el método estático 'newJob (...)' se importa estáticamente, por lo que no es necesario derivarlo por su nombre de clase. –

+0

Lo mismo aplica para 'TriggerBuilder.newTrigger()' y 'CronScheduleBuilder.cronSchedule (...)' –