variable valor una que pasar otra metodos metodo herencia ejemplos definicion clases clase atributos atributo java quartz-scheduler

java - valor - ¿Cómo pasar las variables de instancia al trabajo de cuarzo?



que es una clase en java (4)

Me pregunto cómo pasar una variable de instancia externamente en Cuarzo?

A continuación se muestra el pseudo código que me gustaría escribir. ¿Cómo puedo pasar ExternalInstance a este trabajo?

public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { float avg = externalInstance.calculateAvg(); } }


Al programar el trabajo utilizando un desencadenador, habría definido JobDataMap que se agregará a JobDetail . Ese objeto JobDetail estará presente en el JobExecutionContext pasado al método execute() en su Job . Por lo tanto, debe encontrar una manera de pasar su JobDataMap externa a través del JobDataMap . HTH.


Esta es la responsabilidad de JobFactory . La implementación predeterminada de PropertySettingJobFactory invocará cualquier método de establecimiento de bean, en función de las propiedades que se encuentren en el contexto de Schdeuler, el desencadenante y los detalles del trabajo. Entonces, siempre que haya implementado un método de establecimiento de setContext() apropiado, debería poder hacer cualquiera de las siguientes setContext() :

scheduler.getContext().put("context", context);

O

Trigger trigger = TriggerBuilder.newTrigger() ... .usingJobData("context", context) .build()

O

JobDetail job = JobBuilder.newJob(SimpleJob.class) ... .usingJobData("context", context) .build()

O si eso no es suficiente, puede proporcionar su propia clase JobFactory , que JobFactory una instancia de los objetos de trabajo como le plazca.


Resuelva este problema creando una interfaz con un HashMap pone la información requerida allí.

Implemente esta interfaz en su clase de Job cuarzo, esta información será accesible.

En IFace

Map<JobKey,Object> map = new HashMap<>();

En el Job

map.get(context.getJobDetail().getKey()) => will give you Object


puede poner su instancia en el schedulerContext. Cuando vaya a programar el trabajo, justo antes puede hacerlo a continuación:

getScheduler().getContext().put("externalInstance", externalInstance);

Su clase de trabajo sería como a continuación:

public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { SchedulerContext schedulerContext = null; try { schedulerContext = context.getScheduler().getContext(); } catch (SchedulerException e1) { e1.printStackTrace(); } ExternalInstance externalInstance = (ExternalInstance) schedulerContext.get("ExternalInstance"); float avg = externalInstance.calculateAvg(); } }

Si está utilizando Spring, realmente puede usar el soporte de Spring para inyectar todo el contexto de la aplicación como se responde en el Link