Scheduling Su Primer Trabajo (Embedded Implementación)
Hay algunas cosas que configurar para comenzar.scheduling su primer IPF Scheduler trabajo. Los haremos de la manera más sensata orden posible.
Usted creará un comando, un JobSpecification que utiliza ese comando para definir el trabajo a ejecutar, y un SchedulingHelper
que recibe ese comando en el scheduled tiempo(s) de ejecución.
Paso 1: Cree un comando
Este es un comando que se enviará a su SchedulingHelper, que tiene que extenderse com.iconsolutions.ipf.core.shared.scheduling. SchedulingCommand.
Aquí tiene un ejemplo de uno:
public static class MyCommand implements SchedulingCommand {
}
Paso 2: Crear un SchedulingHelper y defínalo como un Spring bean
Esta es la clase que recibirá una notificación para ejecutar su trabajo a una hora específica, con el comando dado en el paso 1:
public static class MySchedulingHelper implements SchedulingHelper {
@Override
public CompletionStage<Void> execute(String id, SchedulingCommand command) {
//do some really important work here that can possibly take a long time...or not?
log.info("Look I'm being scheduled! The ID was: {}", id);
return CompletableFuture.completedFuture(null);
}
@Override
public boolean supports(SchedulingCommand command) {
return command instanceof MyCommand;
}
}
También deberá definirlo como un bean:
@Bean
public SchedulingHelper mySchedulingHelper() {
return new MySchedulingHelper();
}
Paso 3: Programe el trabajo
Ahora le decimos el SchedulingModuleInterface para programar nuestro trabajo con nuestro comando a una hora específica.
En el ejemplo a continuación, estamos ejecutando nuestro trabajo cada 5 segundos.
public void scheduleJob() {
schedulingModuleInterface.scheduleJob(JobSpecificationDto.builder()
.jobRequestor("test-requestor")
.jobSpecificationKey(new JobSpecificationKeyDto("my-special-job-wow"))
.triggerCommand(new MyCommand())
.triggerIdentifier("my-trigger-id")
.schedulingSpecification("*/5 * * ? * *")
.build());
}
Tenga en cuenta que si desea un trabajo no repetitivo, es decir, un trabajo único, debe utilizar singleSchedule y pase un LocalDateTime representando el tiempo de activación deseado, en lugar de proporcionar un cron-estilo schedulingSpecification.
Exactamente uno de schedulingSpecification(recurrente) o singleSchedule(debe ser) establecido.
|
Campos opcionales:
- zoneId para especificar la zona horaria utilizada al evaluar los horarios (se establece de forma predeterminada en la zona del sistema si se omite)
- lateExecutionThreshold para optar por el manejo de ejecución tardía; cuando se infrinja, el asistente de usted lateExecute(..) se invoca en lugar de execute(..).
Paso 4: ¡Ejecutelo!
Si ejecutamos esta aplicación, podemos ver que cada 5 segundos se imprime nuestro mensaje de registro:
28-02-2023 15:29:00. 002 [DefaultQuartzScheduler_Worker-1] INFO c.i.i.c.p.s.persistent. DocsExamples.execute - Look I'm being scheduled! The ID was: my-trigger-id
28-02-2023 15:29:05. 001 [DefaultQuartzScheduler_Worker-2] INFO c.i.i.c.p.s.persistent. DocsExamples.execute - Look I'm being scheduled! The ID was: my-trigger-id
28-02-2023 15:29:10. 000 [DefaultQuartzScheduler_Worker-3] INFO c.i.i.c.p.s.persistent. DocsExamples.execute - Look I'm being scheduled! The ID was: my-trigger-id
28-02-2023 15:29:15. 001 [DefaultQuartzScheduler_Worker-4] INFO c.i.i.c.p.s.persistent. DocsExamples.execute - Look I'm being scheduled! The ID was: my-trigger-id
28-02-2023 15:29:20. 000 [DefaultQuartzScheduler_Worker-5] INFO c.i.i.c.p.s.persistent. DocsExamples.execute - Look I'm being scheduled! The ID was: my-trigger-id