c# arguments quartz.net quartz.net-2.0

c# - Cómo enviar argumento a la clase en Quartz.Net



arguments quartz.net-2.0 (3)

Resumen

Permítanme extender un post @ arsen-mkrtchyan con una nota significativa que podría evitar un soporte doloroso Código de cuarzo en producción:

Problema (para persistencia JobStore)

Recuerde acerca de la versión de JobDataMap en caso de que esté utilizando JobStore persistente, por ejemplo, AdoJobStore.

Resumen (TL; DR)

  • Piense detenidamente en la construcción / edición de sus JobData, de lo contrario, se producirán problemas para desencadenar trabajos futuros.
  • Habilite el parámetro de configuración "quartz.jobStore.useProperties" como la documentación oficial recomienda minimizar los problemas de versiones. Use JobDataMap.PutAsString () más adelante.

Detalles

Sin embargo, también se indica en la documentación, pero no está tan resaltado, pero podría causar un gran problema de mantenimiento si, por ejemplo, elimina algún parámetro en la próxima versión de su aplicación:

Si usa un JobStore persistente (descrito en la sección JobStore de este tutorial), debe tener cuidado al decidir lo que colocará en el JobDataMap, porque el objeto en él se serializará y, por lo tanto, serán propensos a problemas de versiones de clase.

También hay una nota relacionada sobre la configuración de JobStore mencionada en el documento relevante :

El parámetro de configuración "quartz.jobStore.useProperties" se puede establecer en "true" (predeterminado en falso) para indicar a AdoJobStore que todos los valores en JobDataMaps serán cadenas y, por lo tanto, se pueden almacenar como pares nombre-valor, en lugar de almacenarlos Objetos más complejos en su forma serializada en la columna BLOB. Esto es mucho más seguro a largo plazo, ya que evita los problemas de versiones de la clase que existen al serializar sus clases que no son de cadena en un BLOB.

Estoy usando Quartz.Net (versión 2) para ejecutar un método en una clase todos los días a las 8:00 y a las 20:00 (IntervalInHours = 12)

Todo está bien ya que utilicé el mismo trabajo y activadores que los tutoriales en Quartz.Net, pero necesito pasar algunos argumentos en la clase y ejecutar el método basado en esos argumentos.

¿Puede alguien ayudarme a usar argumentos mientras uso Quartz.Net?


Para expandir la respuesta de @ ArsenMkrt, si está haciendo la configuración de trabajo fluida al estilo 2.x , puede cargar el JobDataMap la JobDataMap manera:

var job = JobBuilder.Create<MyJob>() .WithIdentity("job name") .UsingJobData("x", x) .UsingJobData("y", y) .Build();


Puedes usar JobDataMap

jobDetail.JobDataMap["jobSays"] = "Hello World!"; jobDetail.JobDataMap["myFloatValue"] = 3.141f; jobDetail.JobDataMap["myStateData"] = new ArrayList(); public class DumbJob : IJob { public void Execute(JobExecutionContext context) { string instName = context.JobDetail.Name; string instGroup = context.JobDetail.Group; JobDataMap dataMap = context.JobDetail.JobDataMap; string jobSays = dataMap.GetString("jobSays"); float myFloatValue = dataMap.GetFloat("myFloatValue"); ArrayList state = (ArrayList) dataMap["myStateData"]; state.Add(DateTime.UtcNow); Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays); } }