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 / ...