Documentation for a newer release is available. View Latest

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