Tengo un trabajo de Quartz que ya ha sido programado. Quiero actualizar el JobDataMap asociado con él. Si obtengo un JobDataMap con JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap()
, ¿ese mapa es "en vivo"? es decir. si lo cambio, ¿persistirá en el programador? Si no, ¿cómo lo persisto?Actualizar una JobDataMap existente
Respuesta
Ver http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson03.html:
Una instancia de trabajo puede definirse como "estado" o "no stateful". Los trabajos no declarados solo tienen su JobDataMap almacenado en el momento en que son agregados al programador. Esto significa que cualquier cambio realizado en el contenido del mapa de datos del trabajo durante la ejecución del trabajo se perderá, y no se verá en el trabajo la próxima vez que se ejecute .
... un trabajo con estado es todo lo contrario - su JobDataMap se vuelve a almacenar después de cada ejecución del trabajo.
Usted 'marca' un trabajo como con estado al tener que implementar la interfaz StatefulJob , en lugar de la interfaz de de empleo.
Tuve un problema similar: tengo un segundo activador que activa un trabajo con estado que funciona en una cola en el mapa de datos del trabajo. Cada vez que se dispara el trabajo, sondea desde la cola y realiza algún trabajo en el elemento encuestado. Con cada ejecución de trabajo, la cola tiene un elemento menos (la cola se actualiza correctamente desde el trabajo). Cuando la cola está vacía, el trabajo se programa por sí mismo.
Quería poder actualizar externamente la lista de argumentos de un trabajo/activador en curso para proporcionar más argumentos a la cola. Sin embargo, solo recuperar el mapa de datos y actualizar la cola no fue suficiente (la siguiente ejecución muestra que la cola no está actualizada). El problema es que Quartz solo actualiza el mapa de datos de trabajo de una instancia de trabajo después de la ejecución.
Aquí está la solución que encontré:
JobDetail jobDetail = scheduler.getJobDetail("myJob", "myGroup");
jobDetail.getJobDataMap.put("jobQueue", updatedQueue);
scheduler.addJob(jobDetail, true);
La última línea indica a cuarzo para reemplazar el trabajo almacenado con la persona que está proporcionando. La próxima vez que se active el trabajo, verá la cola actualizada.
Parece que hay un problema con la última versión de Quartz (2.6.10?) –
Lo sentimos, esa es la versión 2.1.7 ... funcionó bien con 2.1.6 anteriormente –
En cuarzo 2.0. StatefulJob
está en desuso. Para conservar el mapa de datos del trabajo, use @PersistJobDataAfterExecution
en la clase de trabajo. Por lo general, va con @DisallowConcurrentExecution
.
Gracias por la información Bozho. –
Pero en qué tabla podemos encontrar la información de JobDataMap, revisé todas las tablas pero no las encontré. –
¿Son las columnas Job_data de la tabla QRTZ_JOB_DETAILS? –
- 1. ¿Cómo actualizar un contacto existente?
- 2. Actualizar la opción ANSI_NULLS en una tabla existente
- 3. Actualizar un valor de columna existente
- 4. Actualizar un nuevo campo al documento existente
- 5. DataMapper: Crear nuevo registro o actualizar existente
- 6. php find emoji [actualizar el código existente]
- 7. ¿Cómo actualizar el campo para agregar valor al valor existente?
- 8. ¿Puedo actualizar un objeto existente de Amazon S3?
- 9. Cómo actualizar sitio web existente de IIS 6 utilizando PowerShell
- 10. morphia y cómo actualizar el campo del documento existente
- 11. ¿Cómo actualizar un objeto existente en Core Data?
- 12. MongoDB: Use save() para actualizar un documento existente en una colección
- 13. Crear nueva entidad o actualizar la existente de una sola vez con JPA
- 14. Adjuntar a una cadena existente
- 15. Actualizar una vista Android
- 16. Agregar una identidad a una columna existente
- 17. Crear una secuencia en una tabla existente
- 18. ¿Cómo actualizo una fila ya existente cuando uso ModelForms?
- 19. ¿Cómo se actualiza una cookie existente en JSP?
- 20. Agregar una columna entera a una tabla mysql existente basada en la columna existente
- 21. ¿Se puede utilizar el método Canary ActiveRecord #save para actualizar un registro existente?
- 22. Método para agregar nuevo o actualizar elemento existente en el diccionario
- 23. Programatically actualizar una Gwt CellTree
- 24. MYSQL - Actualizar una columna completa
- 25. accepts_nested_attributes_for para enlazar a registro existente, no crea una nueva
- 26. Agregar una CustomProperty existente no actualiza el documento
- 27. ¿Cómo cambiar el nombre de una rama SVN y actualizar las referencias en un entorno limitado existente?
- 28. Agregar un blog a una página web existente
- 29. cómo actualizar el resumen existente de EditTextPreference cuando hago clic en el botón Aceptar
- 30. ¿cómo configuro una hora de NSDate existente?
pero ¿qué ocurre si quiero actualizar un trabajo desde fuera de una ejecución? p.ej. de JMX? –