Programación de su primer trabajo (implementación integrada)
Hay algunas cosas que configurar para comenzar a programar su primer trabajo del IPF Scheduler. Las haremos en el orden más sensato posible.
Creará un comando, un JobSpecification que usa ese comando para definir el trabajo a ejecutar, y un SchedulingHelper que recibe ese comando en el/los momento(s) programado(s).
Paso 1: Cree un comando
Este es un comando que será enviado a su SchedulingHelper, el cual debe extender com.iconsolutions.ipf.core.shared.scheduling.SchedulingCommand.
Aquí hay un ejemplo:
public static class MyCommand implements SchedulingCommand {
}
Paso 2: Cree un SchedulingHelper y defínalo como un Spring bean
Esta es la clase que recibirá una notificación para ejecutar su trabajo en un momento específico, 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 a SchedulingModuleInterface que programe nuestro trabajo con nuestro comando en un momento específico.
En el siguiente ejemplo ejecutamos 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());
}
Note que si desea un trabajo no repetitivo, es decir, de una sola vez, debe usar singleSchedule y pasar un LocalDateTime que represente la hora de activación deseada, en lugar de proporcionar una schedulingSpecification de estilo cron.
Paso 4: ¡Ejecútelo!
Si ejecutamos esta aplicación podemos ver que cada 5 segundos se imprime nuestro mensaje de log:
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