Spring Boot - Programación

La programación es un proceso de ejecución de tareas para un período de tiempo específico. Spring Boot proporciona un buen soporte para escribir un programador en las aplicaciones Spring.

Expresión Java Cron

Las expresiones Java Cron se utilizan para configurar las instancias de CronTrigger, una subclase de org.quartz.Trigger. Para obtener más información sobre la expresión cron de Java, puede consultar este enlace:

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

La anotación @EnableScheduling se usa para habilitar el programador para su aplicación. Esta anotación debe agregarse al archivo de clase de la aplicación Spring Boot principal.

@SpringBootApplication
@EnableScheduling

public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

La anotación @Scheduled se utiliza para activar el programador durante un período de tiempo específico.

@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}

El siguiente es un código de muestra que muestra cómo ejecutar la tarea cada minuto comenzando a las 9:00 a.m. y terminando a las 9:59 a.m., todos los días

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(cron = "0 * 9 * * ?")
   public void cronJobSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Java cron job expression:: " + strDate);
   }
}

La siguiente captura de pantalla muestra cómo se inició la aplicación a las 09:03:23 y por cada minuto desde ese momento se ejecutó la tarea del programador de trabajos cron.

Tipo de interés fijo

El programador de tasa fija se utiliza para ejecutar las tareas en el momento específico. No espera a que se complete la tarea anterior. Los valores deben estar en milisegundos. El código de muestra se muestra aquí:

@Scheduled(fixedRate = 1000)
public void fixedRateSch() { 
}

Aquí se muestra un código de muestra para ejecutar una tarea cada segundo desde el inicio de la aplicación:

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedRate = 1000)
   public void fixedRateSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Rate scheduler:: " + strDate);
   }
}

Observe la siguiente captura de pantalla que muestra la aplicación que se inició a las 09:12:00 y luego se ejecutó cada segundo tarea del programador de tasa fija.

Retraso fijo

El programador de retardo fijo se utiliza para ejecutar las tareas en un momento específico. Debería esperar a que se complete la tarea anterior. Los valores deben estar en milisegundos. Aquí se muestra un código de muestra:

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}

Aquí, initialDelay es el tiempo después del cual la tarea se ejecutará por primera vez después del valor de retraso inicial.

A continuación, se muestra un ejemplo para ejecutar la tarea cada segundo después de que se hayan completado 3 segundos desde el inicio de la aplicación:

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedDelay = 1000, initialDelay = 3000)
   public void fixedDelaySch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Delay scheduler:: " + strDate);
   }
}

Observe la siguiente captura de pantalla que muestra la aplicación que se inició a las 09:18:39 y después de cada 3 segundos, la tarea del programador de retraso fijo se ha ejecutado en cada segundo.