quartz grails quartz-scheduler grails-plugin

grails 3 quartz



Uso de las fuentes de datos de Grails en el plugin de cuarzo (1)

Quiero crear trabajos de cuarzo que usen una JdbcStore como se describe en la sección de clustering de los documentos , en el ejemplo de Burt.

El ejemplo muestra cómo configurar el cuarzo usando un archivo quartz.properties.

Ahora, me gustaría que mi tienda jdbc sea la misma base de datos que mi aplicación Grails, por lo que tengo menos configuraciones para duplicar.

Entonces, asumiendo que creo manualmente las tablas requeridas en mi base de datos, ¿es posible usar el dataSource predeterminado configurado en Datasource.groovy con el plugin de cuarzo?

Estoy usando Grails 2.4.4 y cuarzo 1.0.2.

En otros términos, ¿puedo agregar mi configuración a QuartzConfig.groovy en lugar de crear un nuevo archivo quartz.properties? Al menos podría beneficiarme de la configuración de entornos separados.

¿Sería algo así como válido en QuartzConfig.groovy?

quartz { autoStartup = true jdbcStore = true waitForJobsToCompleteOnShutdown = true exposeSchedulerInRepository = true props { scheduler.skipUpdateCheck = true threadPool.class = ''org.quartz.simpl.SimpleThreadPool'' threadPool.threadCount = 50 threadPool.threadPriority = 9 jobStore.misfireThreshold = 60000 jobStore.class = ''impl.jdbcjobstore.JobStoreTX'' jobStore.driverDelegateClass = ''org.quartz.impl.jdbcjobstore.StdJDBCDelegate'' jobStore.useProperties = false jobStore.tablePrefix = ''QRTZ_'' jobStore.isClustered = true jobStore.clusterCheckinInterval = 5000 plugin.shutdownhook.class = ''org.quartz.plugins.management.ShutdownHookPlugin'' plugin.shutdownhook.cleanShutdown = true jobStore.dataSource = ''myDS'' // [...] }


Me las arreglé para modificar todas mis configuraciones en QuartzConfig.groovy. Lo único que tuve que eliminar para que funcionara fueron las opciones específicas de la base de datos.

Además, tuve que agregar la propiedad scheduler.idleWaitTime = 1000 como se aconseja aquí http://www.quartz-scheduler.org/generated/2.2.1/pdf/Quartz_Scheduler_Configuration_Guide.pdf en la página 12, porque a pesar de que mi trabajo se llamaba como MyJob.triggerNow(paramsMap) , hubo un retraso de 20 a 30 segundos antes de que realmente comenzara.

Con scheduler.idleWaitTime configurado en 1 segundo, el trabajo de hecho se desencadena 1 segundo después de que se haya enviado.

QuartzProperties.groovy en realidad acepta todas las propiedades descritas en los documentos de configuración de cuarzo (p. Ej .: http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJobStoreTX ). Simplemente org.quartz dentro del bloque props {...} y elimine el prefijo org.quartz .

Aquí está mi configuración final, como un ejemplo:

quartz { autoStartup = true jdbcStore = true waitForJobsToCompleteOnShutdown = true // Allows monitoring in Java Melody (if you have the java melody plugin installed in your grails app) exposeSchedulerInRepository = true props { scheduler.skipUpdateCheck = true scheduler.instanceName = ''my_reporting_quartz'' scheduler.instanceId = ''AUTO'' scheduler.idleWaitTime = 1000 threadPool.''class'' = ''org.quartz.simpl.SimpleThreadPool'' threadPool.threadCount = 10 threadPool.threadPriority = 7 jobStore.misfireThreshold = 60000 jobStore.''class'' = ''org.quartz.impl.jdbcjobstore.JobStoreTX'' jobStore.driverDelegateClass = ''org.quartz.impl.jdbcjobstore.StdJDBCDelegate'' jobStore.useProperties = false jobStore.tablePrefix = ''QRTZ_'' jobStore.isClustered = true jobStore.clusterCheckinInterval = 5000 plugin.shutdownhook.''class'' = ''org.quartz.plugins.management.ShutdownHookPlugin'' plugin.shutdownhook.cleanShutdown = true } }

No olvide crear las tablas sql con la secuencia de comandos adecuada, que se encuentra en /path/to/your/project/target/work/plugins/quartz-1.0.2/src/templates/sql / ...